Mongodb 通过从另一个子文档获取数据来创建嵌入文档

Mongodb 通过从另一个子文档获取数据来创建嵌入文档,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一份文件看起来像 org: { "name": "tera", "orgLocation": { "street":"xyz", "postal Code": "45893", "latitude": "64.23456", "longitude": "62.75469" } } 现在,我想将纬度和经度作为一个单独的子文档保存,以便该文

我有一份文件看起来像

org: {
        "name": "tera",
        "orgLocation": {
            "street":"xyz",
            "postal Code": "45893",
            "latitude": "64.23456",
            "longitude": "62.75469"
         }
     }
现在,我想将纬度和经度作为一个单独的子文档保存,以便该文档看起来像:

 org: {
     "name":"tera",
     "orgLocation": {
         "street":"xyz",
         "postal Code":"45893",
         "latitude":"64.23456",
         "longitude":"62.75469" 
       },
     orgGeo: {
         "latitude":"64.23456",
         "longitude":"62.75469" 
     }
  }
作为mongoDB的新手,我不知道该怎么做


有人能帮我吗。

如果您想使用同一文档中现有字段的值更新文档,您需要使用该方法循环每个文档,并使用操作更新每个文档,以获得最大效率

var bulk=bulk=db.test.initializeOrderedBulkOp(),
计数=0;
db.test.find({“org”:{“$exists”:true}}).forEach(函数(doc){
变量纬度=单据[“组织”][“组织位置”][“纬度”],
经度=文件[“组织”][“组织位置”][“经度”];
bulk.find({“\u id”:doc.\u id}).update({
“$set”:{
“org.orgGeo.latitude”:纬度,
“org.orgGeo.longitude”:经度
} 
}); 
计数++;
如果(计数%100==0){
//每100次操作执行一次并重新初始化。
bulk.execute();
bulk=db.test.initializeOrderedBulkOp();
} 
})
//清理队列
如果(计数%100!=0)
bulk.execute();

运行此查询后,您的文档将如下所示:

{
“_id”:ObjectId(“55fd008f6606c68eb1d64934”),
“组织”:{
“名称”:“tera”,
“组织地点”:{
“街道”:“xyz”,
“邮政编码”:“45893”,
“纬度”:“64.23456”,
“经度”:“62.75469”
},
“orgGeo”:{
“纬度”:“64.23456”,
“经度”:“62.75469”
}
}
}

如果要使用同一文档中现有字段的值更新文档,则需要使用该方法遍历每个文档,并使用操作更新每个文档,以获得最大效率

var bulk=bulk=db.test.initializeOrderedBulkOp(),
计数=0;
db.test.find({“org”:{“$exists”:true}}).forEach(函数(doc){
变量纬度=单据[“组织”][“组织位置”][“纬度”],
经度=文件[“组织”][“组织位置”][“经度”];
bulk.find({“\u id”:doc.\u id}).update({
“$set”:{
“org.orgGeo.latitude”:纬度,
“org.orgGeo.longitude”:经度
} 
}); 
计数++;
如果(计数%100==0){
//每100次操作执行一次并重新初始化。
bulk.execute();
bulk=db.test.initializeOrderedBulkOp();
} 
})
//清理队列
如果(计数%100!=0)
bulk.execute();

运行此查询后,您的文档将如下所示:

{
“_id”:ObjectId(“55fd008f6606c68eb1d64934”),
“组织”:{
“名称”:“tera”,
“组织地点”:{
“街道”:“xyz”,
“邮政编码”:“45893”,
“纬度”:“64.23456”,
“经度”:“62.75469”
},
“orgGeo”:{
“纬度”:“64.23456”,
“经度”:“62.75469”
}
}
}

Hi,我试图复制相同的,但其抛出:TypeError:无法读取(shell)处未定义的属性“orgLocation”:DBQuery.forEach(src/mongo/shell/query.js:414:9)处的2:40(shell):1:25它说它无法读取Shellat undefined的“orgLocation”属性。我无法加入房间,因为我没有20个积分。您使用的是正确的集合吗?因为这意味着要么您没有使用正确的集合,要么您的某些文档没有
org
字段?
your\u collection\u name.find({org:{$exists:false}}})的输出是什么?
?我使用了正确的集合,并获取了上述查询的数据。对于一些我没有orgLocationHi的文档,我试图复制相同的内容,但其抛出:TypeError:无法读取(shell)中未定义的at的属性“orgLocation”:DBQuery.forEach(src/mongo/shell/query.js:414:9)中的2:40:1:25它说它无法读取Shellat undefined的“orgLocation”属性。我无法加入房间,因为我没有20个积分。您使用的是正确的集合吗?因为这意味着要么您没有使用正确的集合,要么您的某些文档没有
org
字段?
your\u collection\u name.find({org:{$exists:false}})的输出是什么?
?我使用了正确的集合,并获取了上述查询的数据。对于某些文档,我没有orgLocation