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