我有一个类似的集合中的文档:
{
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 });
答案 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 }
};