我必须要mongodb集合。 首先我会打电话给coll1并获得ids.Then我想调用coll2并通过id和其他字段进行搜索。如何在节点js中调用同步mongo查询
当我打电话给funtion时,它正在回调undefined。
我如何等待直到我不能从功能中获得结果。
coll1文档样品: {
“_id”:的ObjectId( “”), “CONTAINER_ID”: “56867887fdb391ff09d15e9”, “item_state”:[ { “USER_ID”:1, “用户名”: “X”, “状态”: “1” }, { “USER_ID”:2, “用户名”: “Y”, “状态”: “3” } ], “名称”:“会员测试” } 在这里输入的代码
function listMyWorkitems(user_id,callback) {
var user_id=1;
var workItemList = new Array();
db.collection('containers').find({'start_date':{"$lt":new Date(2017,02,11)}}).toArray(function(err,docs){
console.log("doc length");
console.log(docs.length);
for (var i = 0; i < docs.length; i++) {
db.collection('work_items').find({"$and":[{'container_id':docs[i]._id.toString()},{'item_state':{"$elemMatch":{'user_id':user_id,'is_active':1,'state':{"$in":["1","2","3"]}}}}]}).toArray(function(err,workDocs){
//console.log(workDocs);
for (var i = 0; i < workDocs.length; i++) {
for (var j = 0; j < workDocs[i].item_state.length; j++) {
var doc=workDocs[i].item_state[j]
workItemList.push(workDocs[i].name)
}
}
});
}
callback(workItemList);
});
}
listMyWorkitems(user_id,funtion(err,workItemList) {
console.log(workItemList)
});
我明白异步汽车概念,但它毕竟是返回空列表 这里是代码是我的尝试到现在..我收集1做,但一旦它解决的话,我可以查询以收集2还..
var async = require('async');
var mongojs = require("mongojs");
var db = mongojs("localhost/mc_dev");
async.auto({
coll1task: function(callback) {
var idlist =[];
console.log("ids fetch from collection 1");
db.collection('containers').find({'start_date':{"$lt":new Date(2017,02,11)}}).toArray(function(err,docs){
docs.forEach(function(doc){
console.log(doc._id);
idlist.push(doc._id);
});});
callback(null,idlist);
},
finalcontrol: [
'coll1task',
function(results,callback) {
console.log(results.coll1task);
}
],
},
function(error, results) {
console.log('error = ', error)
console.log('results = ', results)
})
感谢您的快速回复。我是新的节点js.我得到了你想说的..但我怎么会在我的代码中使用汽车..你可以帮我在code.how我的代码将使用自动? –
你的代码中还有几个问题。你必须在javascript中学习闭包,你将学习如何在javascript中实现循环。那么当你的循环像{j == workDocs [i] .item_state.length-1}那样结束时,你的回调应该是最后的。只需要在你的第一个查询中运行两个函数,然后在第二个函数中你可以使用1st的结果并执行进一步的步骤。 –
是的,我必须把集合1查询以外的回调..我可以在自动创建2函数,首先将查询coll1其输出将转到function2,这将查询collection2。但是,我们如何将汽车本身称为funtion ..请参阅我的示例。 –