[英]Mongodb: Querying array of subdocuments
我有用户集合,其架构如下:
{
_id: unique number,
name: 'asdf',
age: '12',
gender: 'm',
address: [
{area: 'sdf',
city: 'sdq',
state: 'wfw'},
{area: 'asdf',
city: 'sdfs',
state: 'vfdwd'}
]
}
我想找出address
所有state
值应该是我传递的值的用户。 如果state
值之一与我传递的值都不匹配,则不应返回用户。 我尝试使用$unwind
, $match
简单的查找,聚合框架,但似乎没有解决方案。 你能帮我一下吗...
谢谢
附言:请为多个地址承担疑问。 :)
要找出所有数组条目是否都与状态“ wfw”匹配,请执行以下汇总:
db.users.aggregate([
{ "$project" : {
"test" : {
"$allElementsTrue" : [{
"$map" : {
"input" : "$address",
"as" : "a",
"in" : { "$eq" : ["wfw", "$$a.state"] }
}
}]
}
} },
{ "$match" : { "test" : true } }
])
该汇总将获取每个文档,在地址数组上映射“状态等于'wfw'”,以获取布尔数组,然后测试整个数组是否为真,将结果存储在`test中,然后基于test过滤结果。 您将需要MongoDB 2.6来支持某些操作员。
我不知道我是否理解。
我复制了您的文件。 当您想按state
检索用户时,可以采取多种方式
如果您使用单一值进行搜索,则可以
db.g.find({ "address.state": "wfw" })
并检索用户
您可以使用$all
db.g.find( { "address.state": { $all: ["wfw","vfdwd"] } } ) // retrieve User
db.g.find( { "address.state": { $all: ["wfw","vfdwd","foo"] } } ) // don't retrieve User
或者您可以使用$and
db.g.find( { $and: [ { "address.state":"wfw" },{ "address.state":"vfdwd" }] } )
但是我不知道你的问题
更新和正确答案
db.g.find( { "address.state": { $nin: ["wfw"] } } )
让我知道
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.