我正在节点中构建一个mongo查询:
query = {"status":{$ne:"Complete"}}, {"processId":1, "_id":0};
然后我执行查询:
return this.engine.dbcollectionName.find(query).toArray(function(err, result){...
如果我评估“条件”,结果是'status = $ ne:“完成”'......但是,我的投影缺失了。
我是否遗漏了一些关于如何在javascript变量中表示json的内容?它的表现就像我在逗号后面没有任何内容。
另一种说法,在我想要的mongo CLI中: db.collection.find({“status”:{$ ne:“Complete”}},{“processId”:1,“_ id”:0})
而在节点内,我相当于(注意没有投影): db.collection.find({“status”:{$ ne:“Complete”}})
任何帮助表示赞赏!感谢
答案 0 :(得分:2)
您的查询和投影必须是find
的单独对象参数:
var query = {"status":{$ne:"Complete"}};
var projection = {"processId":1, "_id":0};
this.engine.dbcollectionName.find(query, projection).toArray(function(err, result){...
答案 1 :(得分:1)
我看到的JavaScript新手。如果你想构造一个参数数组,那么你需要一个实际的数组,并且方法签名的工作方式在这里你还需要JavaScript .apply()
方法:
var async = require('async'),
mongodb = require('mongodb'),
MongoClient = mongodb.MongoClient;
MongoClient.connect('mongodb://localhost/test',function(err,db) {
var query = [{ "status": { "$ne": "Complete" } }, { "processId": 1, "_id": 0 } ];
db.collection('collectionname',function(err,coll) {
coll.find.apply(coll,query).toArray(function(err,docs) {
if (err) throw err;
console.log( JSON.stringify( docs, undefined, 2 ) );
});
});
});
否则你要分离像
这样的参数 coll.find.(
{ "status": { "$ne": "Complete" } },
{ "processId": 1, "_id": 0 }
).toArray(function(err,docs) {
这样每个项目都会单独传递给函数。
.apply()
允许您将列表变量或参数数组传递给函数。它通常需要一个上下文作为第一个参数,在这种情况下是"集合" .find()
方法所属的对象。