很抱歉,如果这是一个基本问题,但我似乎无法找到如何在任何地方执行此操作的示例。我想编写一个shell脚本,从find中构造一个文档,并将结果插入到另一个集合中......如下所示,但以下内容不起作用:
cursor = db.Patients.find({},{"patient_id":1})
while (cursor.hasNext()) {
db.newCollection.insertOne(cursor.next());
}
当我运行它时,没有任何内容填充到newCollection集合中,但我也没有得到错误。
答案 0 :(得分:1)
在聚合框架中使用$out
运算符。
试试这个mongo查询:
db.Patients.aggregate([
{$project:{"patient_id":1}},
{$out: "NewCollection"}
])
或使用db.eval()
db.eval(function(patient_id){
var docs = db.Patients.find( { patient_id: patient_id } ).toArray();
db.NewCollection.insert(docs);
return docs;
}, 1);
或使用forEach()
db.Patients.find({"patient_id":1}).forEach(
function(doc){db.Newcollection.insert(doc);}
)
答案 1 :(得分:1)
如果您将cursor
声明为变量以保持shell不为您迭代光标,那么您的代码将会起作用:
var cursor = db.Patients.find({},{"patient_id":1})
while (cursor.hasNext()) {
db.newCollection.insertOne(cursor.next());
}
但您可能还希望为插入的文档分配新的_id
值,因此您可以将文档中的原始_id
值排除为:
var cursor = db.Patients.find({},{"patient_id":1, _id:0})
while (cursor.hasNext()) {
db.newCollection.insertOne(cursor.next());
}