Mongo查询不包含我的过滤子句

时间:2014-10-04 00:52:19

标签: javascript node.js mongodb

我正在节点中构建一个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”}})

任何帮助表示赞赏!感谢

2 个答案:

答案 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()方法所属的对象。