通过更改单个字段的值来克隆Meteorjs中的MongoDB对象

时间:2014-03-24 09:47:10

标签: mongodb meteor mongoid meteorite

我正在开发一个在后端使用MongoDB的Meteorjs应用程序。 在我的集合中,有一些对象具有名为parent_id的公共字段,例如

{name:'A',parent_id:'acd'}
{name:'b',parent_id:'acd'}
{name:'c',parent_id:'acd'}
{name:'d',parent_id:'acd'}

我想通过更改parent_id字段(例如

)来复制数据库中的所有这些对象
{name:'A',parent_id:'acdef'}
{name:'b',parent_id:'acdef'}
{name:'c',parent_id:'acdef'}
{name:'d',parent_id:'acdef'}

这些所有对象都将在这样的数据库中

{name:'A',parent_id:'acd'}
{name:'b',parent_id:'acd'}
{name:'c',parent_id:'acd'}
{name:'d',parent_id:'acd'}
{name:'A',parent_id:'acdef'}
{name:'b',parent_id:'acdef'}
{name:'c',parent_id:'acdef'}
{name:'d',parent_id:'acdef'}

为此我找到了db中包含parent_id的元素:' abc'     项= db.collection.find({PARENT_ID:' ABC&#39)。取() 并使用循环我已经更改了每个项目的parent_id,然后尝试了这个命令

for(i=0;i<items.length;i++){
    items[i].parent_id='abcdef';
    meteor.collection.insert(item)
}

但它给了我一个错误duplicate for _id

2 个答案:

答案 0 :(得分:2)

除非您首先从对象中删除 _id值,否则它将会出现:

for(i=0;i<items.length;i++){
    items[i].parent_id='abcdef';
    delete items[i]["_id"];
    meteor.collection.insert(item[i])
}

所以删除应该清除它,并且会生成 _id

答案 1 :(得分:1)

当您Collection.find()文档时,您可以使用字段说明符排除_id字段。

var items = collection.find({}, {fields: {name: 1, parent_id: 1, _id: 0}).fetch();

然后,当您再次修改并插入这些文档时,它们将是重复的,每个文档都有自己唯一的_id