簡體   English   中英

Mongodb:查詢子文檔數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM