【发布时间】:2023-03-15 11:42:01
【问题描述】:
我有一个集合“用户”,其中包含类似的文档
{
_id:ObjectId("xx"),
searches:[
{someId:"yyy","fav_food":"pasta"},
{someId: "zzz","fav_food":"macncheese"}
]
}
someId 映射到另一个集合“job”
{
_id:yyy,
job_name:"clerk",
"name": "kent"
},
{
_id:zzz,
job_name:"racer",
"name":"michael"
}
我必须从作业集合中增强用户集合中的数据
所以用户文档应该是:
{
_id:ObjectId("xx"),
searches:[
{someId:"clerk::kent",fav_food:"pasta"},
{someId: "michael::racer","fav_food":"macncheese"}
]
}
我有
mongo_db.collection('job', function(err,coll){
for(var i = 0; i <= data.searches.length-1; i++) {
var pid = data.searches[i].someId;
console.log("RELEASE ID " + someId);
if(pid !== null || pid !== undefined){
result = coll.findOne({"_id":ObjectId(pid)});
if(result){
console.log("this is data searches for index " + i+ " " + JSON.stringify(data.searches[i])
+ " and data.searches " + JSON.stringify(data.searches) + " and this is result " + JSON.stringify(result));
data.searches[i].someId = result.name + "::" + result.job_name;
}
}
}
return data;
})
这似乎不起作用...任何想法我该怎么做?我知道我必须使用 Promises/Async 函数,但我似乎找不到正确的组合。
【问题讨论】:
-
不 - 我不想将它写回 MongoDB。我想保留结果文档并稍后处理。你知道如何使用 await/promises 来解决我的问题吗?
-
coll.findOne({"_id":ObjectId(pid)});之前需要使用await;
-
当您可以在 mongodb 聚合查询中执行时,它不需要在 javascript 中执行。请参阅下面的答案。
标签: node.js mongodb promise bluebird