我可以将某些字段从集合复制到另一个集合吗?
我希望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");
但是复制整个集合
答案 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}
});
});
这里我们使用上面的函数遍历数据。我们遍历要从中复制数据的集合,然后在函数内部更新我们要添加/更新该数据的文档。