在集合文档中,有一个'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...
查询错误失败
如果问题是我可以用其他角色替换前斜线,但我怀疑它们没问题。我试过逃避前斜线,但没有区别。
有什么建议吗?
答案 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}})