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

我在一个集合中有一个文档,如下所示:

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

程序中dynamic生成值“P39433”和“P30213”。 我可以运行下面的查询使用针对mongo的点符号直接和我得到所需的结果

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

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

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

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

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

你很近 尝试这个:

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

更新

现在Node.js 4+支持计算属性名称 ,您可以按照以下步骤创builddynObj

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