添加额外的字段依赖于其他查询的查询结果在mongodb中,使用mongojs
Add extra fields dependent of other query to query result in mongodb, using mongojs
我需要做一个MongoDB查询,并为我的每一个结果添加一个额外的字段。字段值依赖于另一个查询的结果。
我试图在我的server.js
代码中调用嵌套查询。它不能工作,因为在修改数据元素之前调用了res.json(data)
。我怀疑有一种方法可以在我的db.js
代码中使用嵌套查询(或使用forEach
或aggregate
之类的东西)来做我想做的事情,但是我缺乏JavaScript/Mongo的经验并没有让我找到一个好的解决方案。
如有任何帮助,不胜感激。
server.js
app.get("/get_users_list", function(req, res) {
db.getUsersByCity(req.query.city, function(err, data) {
if (err) {
res.send(err);
} else {
for(var i in data) {
var rec = data[i];
db.checkVisitation({'user_id': req.query.user_id, 'friend_id': rec.user_id},
function(inner_err, inner_data) {
if (inner_data) {
rec["visited"] = "true";
} else {
rec["visited"] = "false";
}
});
}
res.json(data);
}
});
});
db.js
var checkVisitation = function(visitJSON, callback) {
db.visitations.findOne(visitJSON, callback);
}
var getUsersByCity = function(city, callback) {
db.users.find({'city': city}).toArray(callback);
}
编辑:我可以通过在我的内部回调中添加检查来解决这个问题:
if (i == data.length - 1) {
res.json(data);
}
只有在从db获得所有响应后才需要调用res.json。由于请求是异步的,您需要组织代码来等待它们完成。使用异步调用组织代码有两种广泛采用的方法:
- 使用async.js https://github.com/caolan/async
- 使用承诺https://github.com/kriskowal/q
我建议你从async开始,因为它更接近当前代码
在for循环中有res.json(data),因此它将在for循环的第一个增量中发送数据-而不是在循环完成时发送数据。
在执行res.json(data);
之前,您需要一个回调或检查以确保for循环完成。还应该设置data[i]["visited"] = "true"或false而不是设置rec,因为rec是一个单独的变量,您不会返回
相关文章:
- 如何处理node.js节点mongodb中的连接和查询队列
- Mongodb数千个并行运行的查询
- 使用MEAN堆栈-查询MongoDB并将值作为变量传递
- MongoDB嵌套对象数组后查询
- 如何在mongodb中进行查询
- MongoDB collection.find()查询挂起
- 检查 mongodb 中是否存在项目(多个查询)
- 需要呈现MongoDB查询返回结果的特定索引/位置
- 使用计算值查询MongoDB
- 查询Mongodb时混合使用field和js函数
- 这是查询MongoDB的最佳结构吗?
- 查询MongoDB中不存在的字段
- 查询 MongoDB 删除触发器
- 我可以按日期查询MongoDB ObjectId吗?
- 使用nodejs查询MongoDb
- 如何在查询mongodb时将字符串值替换为斜杠
- 使用meteor查询mongodb集合中的子对象属性
- 查询mongodb中nodejs应用的总用户数
- 使用Express查询MongoDB服务器(Node.js项目)
- 在js中查询mongodb并将结果设置为变量