0
Collection.find({ $and: [ {title: { $exists: true}}, {reference: { $exists: true }} ]}).pretty()
這給我與結構的一些文件:的MongoDB:移動領域的新文件和更新領域和陣列
{
"_id" : "EJBFtZ7EeGbBPwJaw",
"title" : "title",
"reference" : "8uujF9pivpGA37oQc",
"parent" : "v7DJzq859XX4kvKPi",
"ancestors" : [
"v7DJzq859XX4kvKPi"
]
}
現在我要改變所有文件的方式:
- 將標題移至新文檔並
- 將
parent
id更新爲新文檔 - 推新標識的祖先(在第一位置!)
結果應該是:
{
"_id" : "gzRn4nDKfeewb8EYE", // new document
"title" : "title", // moved title
"parent" : "v7DJzq859XX4kvKPi",
"ancestors" : [
"v7DJzq859XX4kvKPi"
]
},
{
"_id" : "EJBFtZ7EeGbBPwJaw", // removed title
"reference" : "8uujF9pivpGA37oQc",
"parent" : "gzRn4nDKfeewb8EYE", // update parent id to new id
"ancestors" : [
"gzRn4nDKfeewb8EYE", // add new id at first pos
"v7DJzq859XX4kvKPi"
]
}
所以我在想什麼的是類似的東西:
Collection.find({ $and: [ {title: { $exists: true}}, {reference: { $exists: true }} ]}).forEach(function(doc) {
// get data from source
var id = doc.id;
var title = doc.title;
var parent = doc.parent;
// insert new document
var newId = Collection.insert({
title: title,
parent: parent,
ancestors: [parent]
});
// update source document
if (newId) {
Collection.update(
{ _id: id },
{
$set: { parent: newId }, // update parent id
$push: { ancestors: newId } // update ancestors array
$unset: { title: '' } // remove title
}
);
}
});
- 但是,執行
$push
將追加該ID,而不是預先添加它。 - 使用
if (newId) {}
或使用insert
的回調函數是否正確?
如果有任何改進可能,請讓我知道。
則應指定 「0 $位置」:-https://docs.mongodb.org/v2.6/reference/operator/update/position/ –
待辦事項如果我使用'$ position',我必須使用'$ each',儘管只有一個元素是我想要推送的。 – user3142695
是的,你需要使用每個嘗試使用$推:{ancestors:{$ each:[newId],$ position:0} –