MongoDB:将字段移动到新文档并更新字段和数组
mongodb: moving field to new document and update fields and array
Collection.find({ $and: [ {title: { $exists: true}}, {reference: { $exists: true }} ]}).pretty()
这给了我一些带有结构的文档:
{
"_id" : "EJBFtZ7EeGbBPwJaw",
"title" : "title",
"reference" : "8uujF9pivpGA37oQc",
"parent" : "v7DJzq859XX4kvKPi",
"ancestors" : [
"v7DJzq859XX4kvKPi"
]
}
现在我必须以这种方式转换所有文档:
- 将标题移动到新文档,然后
- 将
parent
ID 更新为新文档 - 将新 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
的回调函数中?
如果有任何可能的改进,请告诉我。
1) 尝试$position变量 https://docs.mongodb.org/master/reference/operator/update/position/#up._S_position
2)就个人而言,我会做与MongoDB插入方法相同的操作,返回创建的新_ID。
问候
相关文章:
- 如何在新的Meteor Collection文档中设置服务器上的created_on字段
- 循环访问文档 (validate_doc_update) 中的 CouchDB 字段
- findAndModify,如何对文档进行操作's数组搜索对象并更改字段值
- 将文档的MongoDB字段合并到一个文档中
- 如何在一个字段中只提取6个值为true的文档
- 可编辑文档中多个字段的本地存储
- 查找包含子对象MongoDb和Node.js的特定字段的文档
- Mongoose创建一个文档,如果找不到指定的字段,则更新文档中的数组
- 仅返回嵌入文档列表中的某些字段
- 在MongoDB和Node.js中查找某个字段具有与对象完全相同元素的文档
- 将多个文档中的字段保存到对象
- 在响应之前向文档添加其他字段
- 如何从MongoDB中选择所有文档,其中一个字段不等于某个值
- MongoDB:按日历周和年聚合文档,并计算一个字段的所有值的总量
- 在MongoDB中,从文档中获取单个字段数组的最简单方法是什么
- 向文档 mongodb 添加新字段
- MongoDB:确保只有一个文档可以将字段设置为 true
- 在文档加载时使用 JQuery 在下拉字段中设置默认值
- CouchDB:访问_design视图或提取文档字段的替代方法是什么
- 是否可以从文档中的输入字段执行简单的 javascript 语句