【问题标题】:Clone MongoDB objects in Meteorjs by changing value of a single field通过更改单个字段的值在 Meteorjs 中克隆 MongoDB 对象
【发布时间】:2015-08-07 13:24:53
【问题描述】:

我正在开发一个在后端使用 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'}

为此,我从数据库中找到了具有 parent_id:'abc' 的元素 items=db.collection.find({parent_id:'abc').fetch() 并使用循环我更改了每个项目的 parent_id,然后尝试了这个命令

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

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

【问题讨论】:

    标签: mongodb meteor mongoid meteorite


    【解决方案1】:

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

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

    所以 delete 应该清除它并且将生成一个new _id

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-21
        • 2017-07-20
        • 1970-01-01
        相关资源
        最近更新 更多