在Mongo中使用$存在动态密钥名称和节点的本机驱动程序

时间:2013-05-10 00:36:08

标签: node.js mongodb

我有一个类似的集合中的文档:

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

1 个答案:

答案 0 :(得分:8)

你很亲密。试试这个:

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 }
};