Mongoskin查询使用变量作为查询键检查文档$是否存在

时间:2015-07-26 01:50:49

标签: javascript mongodb mongoskin

使用Mongoskin,我想检查MongoDB集合中是否存在文档,其中每个文档都有一个唯一键和一个数组作为其值。这段代码完美无缺:

db.collection('buyerRec').find({ "abcd" : { $exists : true }}, { _id:0 }).toArray(function(err, doc) {
  ...
});

找到“abcd”文件。但是,在实际系统的设计中,文档的查询键事先是未知的,因此我需要使用变量代替“abcd”。我找不到有效的组合。在两种失败的情况下,它总是返回一个空数组 -

失败的例子-1:

console.log("idCode: " + typeof idCode + " " + idCode); // idCode: string abcd

db.collection('buyerRec').find({ idCode : { $exists : true }}, { _id:0 }).toArray(function(err, doc) {
  ...
});

失败的例子-2:

console.log("idCode: " + typeof idCode + " " + idCode); // idCode: string abcd

var query = "\"" + idCode + "\"";
console.log("query: " + typeof query + " " + query);  // query: string "abcd"

db.collection('buyerRec').find({ query : { $exists : true }}, { _id:0 }).toArray(function(err, doc) {
  ...
});

对我来说,这两个失败的例子中的一个应该重复第一个例子的预期操作。有人可以引导我如何重新编码吗? THX。

1 个答案:

答案 0 :(得分:1)

我认为您的问题可能是creating js object using variables for property name。您可以尝试以下内容:

 fieldName = "abcd"
 var query = {};
 query[fieldName] = {"$exists": true};
 db.collection('buyerRec').find(query)

但是上面的代码实际上并不那么好,因为fieldName不作为参数传递。在我的.mongorc.js(mongo shell每次启动时都会加载.mongorc.js),我为这个案例编写函数,仅供参考。

 DBCollection.prototype.has = function(fieldName) {
   var query = {}; // construct a empty object
   query[fieldName] = {"$exists": true};
   return db.getCollection(this._shortName).find(query).pretty();
 }

然后你可以写下如下的查询:

 db.buyerRec.has("abc") // in mongo shell

但是,我认为你实际上必须编写自己的函数,因为我的注意力集中在检查某个键是否存在。  无论如何,希望它有所帮助。