来自MongoDb中另一个集合的copyValue

时间:2014-04-08 09:38:44

标签: javascript mongodb

我可以将某些字段从集合复制到另一个集合吗?

我希望bar的复制值为foo集合,但我不希望输入类型,并且我想要插入foo e new _id e extra field(userId)(然后我使用Node.js)

collection bar
{
    "_id" : ObjectId("77777777ffffff9999999999"),
    "type" : 0,
    "name" : "Default",
    "index" : 1,
    "layout" : "1",    
}


collection foo
{
    "_id" : NEW OBJECT ID,
//    "type" : 0, NO IN THIS COLLECTION
    "userId" : ObjectId("77777777ffffff9999999911"),
    "name" : "Default",
    "index" : 1,
    "layout" : "1",    
}

我尝试使用db.bar.copyTo("foo");但是复制整个集合

2 个答案:

答案 0 :(得分:0)

实际上这可能是你最好的选择。但是当您不想在收藏中使用新字段时,只需使用$unset删除它:

db.foo.update({ },{ "$unset": { "type": 1 } },false,true)

这将在一个声明中删除新集合中所有文档的字段。

在2.6及更高版本的未来版本中,您也可以使用aggregate

执行此操作
db.bar.aggregate([
    { "$project": {
        "userId" : 1
        "name" : 1
        "index" : 1
        "layout" : 1
    }},
    { "$out": "foo" }
])

新的$out方法将聚合语句的输出发送到集合。

答案 1 :(得分:0)

您可以使用

将字段从一个集合复制到另一个集合
 db.copyFromCollection.find().forEach(function(x){

    db.copyToCOllection.update(
    {"_id" : ObjectId("53205a4a14952bee39f3376e")}, //some condition for update

    { $set:{parameterOfCopyToCollection:x.parameterOfCopyFromCollection}
});

});

这里我们使用上面的函数遍历数据。我们遍历要从中复制数据的集合,然后在函数内部更新我们要添加/更新该数据的文档。