我有一个具有以下结构的文档:
{"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”。
答案 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
}
})
坦率地说,这对于很多文档来说不会很快,但是没有其他方法。该查询将不使用索引。如果您想变得更快,则需要更改文档结构。