【问题标题】:Mongoskin query check if document $exists using a variable as Query KeyMongoskin 查询使用变量作为查询键检查文档 $ 是否存在
【发布时间】:2015-10-16 10:41:15
【问题描述】:

使用 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) {
  ...
});

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

【问题讨论】:

    标签: javascript mongodb mongoskin


    【解决方案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
    

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

    【讨论】:

    • 这对我来说是一个真正的熊和时间浸泡,但你的第一个代码集钉了它。我绝对可以理解为什么您的代码有效。在我的 2 个失败示例中,内部变量是一个字符串,所以我假设它会被评估。也许如果 MongoDB/Mongoskin 文档更广泛,它会说内部 var 不会被评估,但必须作为完整查询对象的一部分包含在内。我现在就是这样理解的。谢谢。
    猜你喜欢
    • 2018-11-18
    • 2022-01-11
    • 1970-01-01
    • 2011-05-06
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    相关资源
    最近更新 更多