蒙皮查询检查文档$是否存在,使用一个变量作为查询键

Mongoskin query check if document $exists using a variable as Query Key

本文关键字:查询 一个 变量 文档 检查 是否 存在      更新时间:2023-09-26

使用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 .

我认为你的问题可能是创建使用属性名称变量的js对象。你可以试着这样做:

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

但是上面的代码实际上不是那么好,因为fieldName没有作为参数传递。在我的. mongoc .js(mongo shell每次启动时都会加载. mongoc .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

但是,我认为你实际上必须编写自己的函数,因为我的函数只关注于检查某个键是否存在。无论如何,希望这对你有帮助。