我正在尝试在mongo数据库中查询嵌入式文档。我根据文档中的字段和嵌入文档中的字段进行查询。
这是一个包含几个文档的示例。
doc 1
{
token: 'foo'
services: [
{
service: 'one',
data: {...}
},
{
service: 'two',
data: {...}
}
]
}
doc 2
{
token: 'bar'
services: [
{
service: 'one',
data: {...}
},
{
service: 'two',
data: {...}
}
]
}
我想从第一份文档中获取{service: 'one', data: {...}}
嵌入式文档。但是我不太确定如何构造查询。有什么建议吗?
答案 0 :(得分:0)
如果您有这样的集合:
var coll = {
token: 'foo',
services: [
{
service: 'one',
data: {}
},
{
service: 'two',
data: {}
}
]
}
您可以使用service: 'one'
查询访问coll.services[0]
对象。
<强>更新强> 如果要逐个字段地选择对象,可以尝试:
$.grep(coll.services, function(e) { return e.service == 'one' });
答案 1 :(得分:0)
如果doc 1和doc 2代表同一个集合中的两个文档,那么你需要通过一些明确的标识符(如id或name等)获取第一个文档,然后从代码中读取services数组的第一个元素。 / p>
如果doc 1和doc 2是查询的结果,你需要过滤匹配{service:'one',data:{...}}的文档,那么因为services是一个数组,你需要使用$ elemMatch。
coll.find( { services : { $elemMatch : { service : "one", data: { ... } } } } )