【问题标题】:using $exists in Mongo with dynamic key names and the native driver for node在 Mongodb 中使用 $exists 和动态键名和节点的本机驱动程序
【发布时间】:2017-01-17 22:59:00
【问题描述】:

我在这样的集合中有一个文档:

{
  container : {
    P39433: 2,
    P30213: 4
  }
}

值“P39433”和“P30213”在程序中动态生成。我可以直接使用点符号对 mongo 运行以下查询,我得到了想要的结果

db.collection.findOne({ "container.P00000" : { $exists : false } }) 

我拿回了文件。即,如果该字段不存在,我只想获取文档。

我的问题是当值P00000 时,如何使用本机驱动程序在 Node 中运行该查询 包含在变量中。

我通常的解决方案是像下面这样构造查询,但它不返回结果。

var fieldName = 'P00000';
var dynObj = {};
dynObj[fieldName] = { $exists : false };
db.collection.findOne( { "container" : dynObj }); 

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    你已经接近了。试试这个:

    var fieldName = 'P00000';
    var dynObj = {};
    dynObj["container." + fieldName] = { $exists: false };
    db.collection.findOne(dynObj); 
    

    更新

    既然 Node.js 4+ 支持computed property names,您可以一步创建dynObj

    var dynObj = {
        ["container." + fieldName]: { $exists: false }
    };
    

    【讨论】:

    • 太好了,完美运行,非常感谢。我尝试了几种不同的变体,但不是那个。
    猜你喜欢
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2022-08-03
    • 2014-07-04
    • 2014-03-27
    相关资源
    最近更新 更多