在不知道MongoDB中键的情况下使用关联数组查找值

时间:2018-10-24 20:59:14

标签: php mongodb mongodb-query

我有一个具有以下结构的文档:

{"user":{
     "nice":{
         "funny":"sure"
             }
     ,
     "notnice":{
         "funny":"maybe"
             }
     }
}

我知道键“ user”,“ funny”以及值“ sure”和“ maybe”,但我不知道“ nice”和“ notnice”。

如何进行优化查询以搜索许多文档。

例如,如果我想知道中间键就搜索“确定”值:

$document = $users->findOne([
'$or' => [
        ['user.nice.funny' => 'sure'],
        ['user.notnice.funny' => 'sure']
    ]
]

);

但是我怎么做却又不知道“ nice”和“ notnice”。

1 个答案:

答案 0 :(得分:0)

这应该为您指明正确的方向:

db.collection.aggregate({
    $addFields: {
        "userTransformed": {
            $objectToArray: "$user" // transform "user" field into key-value pair
        }
    }
}, {
    $match: {
        "userTransformed.v.funny": "sure" // just filter on the values
    }
})

坦率地说,这对于很多文档来说不会很快,但是没有其他方法。该查询将不使用索引。如果您想变得更快,则需要更改文档结构。