1

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

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

1 回答 1

9

你很近。尝试这个:

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

更新

现在 Node.js 4+ 支持计算属性名称,您可以dynObj一步创建:

var dynObj = {
    ["container." + fieldName]: { $exists: false }
};
于 2013-05-10T00:43:02.733 回答