mongo查询 - 属性存在吗?

时间:2015-05-18 11:52:08

标签: node.js mongodb mongodb-query

在集合文档中,有一个'sub'属性,它是一个包含一个或多个属性的对象。该集合看起来像:(我删除了无关的其他属性)

"properties": {
    "source": {
        "a/name": 12837,
        "a/different/name": 76129
    }
}

我需要对集​​合执行查找,其中/ name和/ different / name是变量。

变量嵌入了正斜杠,因为它们是mqtt主题名称,如果你想知道的话。

(node.js中)

我试过了:

collection.find({'properties.source[variable containing name]': {$exists: true}}).toArray(function...

不起作用,没有返回

我也尝试过如下设置查询字符串:

var q = util.format('properties.source.%s', variable containing name);
collection.find({q: {$exists: true}}).toArray(function...

查询错误失败

如果问题是我可以用其他角色替换前斜线,但我怀疑它们没问题。我试过逃避前斜线,但没有区别。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您无法直接将变量用作对象键,因此需要将其更改为:

var name = 'a/name';
var query = {};
query['properties.source.' + name] = {$exists: true};
collection.find(query).toArray(function...

答案 1 :(得分:0)

由于您有一个properties对象而source也是一个对象,因此您应该在以下查询中使用$exist

db.collection.find({"properties.source.a/name":{$exists:true}})