2013-05-10 53 views
1

本地驱动程序我有一个文件集合中,像这样:

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

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

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

我得到的文档回来。即如果该字段不存在,我只想获取文档。

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

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

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

回答

7

你很近。试试这个:

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

这是伟大的,完美的作品,非常感谢许多。我尝试了几种不同的变体,而不是那个。 – Jason 2013-05-10 01:29:22