Bra*_*rad 31 wildcard mongodb mongodb-query
是否可以在查询中对密钥进行通配符?例如,给出以下记录,我想做一个.find({'a.*': 4})
这在这里讨论https://jira.mongodb.org/browse/SERVER-267,但看起来它没有得到解决.
{
'a': {
'b': [1, 2],
'c': [3, 4]
}
}
Run Code Online (Sandbox Code Playgroud)
Gat*_* VP 12
如所述,这是不可能的.您链接到的服务器问题仍然存在"我们不确定的问题".
MongoDB有一些关于数组使用的智能,我认为这是围绕这种功能的复杂性的一部分.
请执行以下查询db.foo.find({ 'a.b' : 4 } ).此查询将与以下文档匹配.
{ a: { b: 4 } }
{ a: [ { b: 4 } ] }
Run Code Online (Sandbox Code Playgroud)
那么"通配符"在这里做什么?db.foo.find( { a.* : 4 } )它与第一份文件相符吗?那第二个怎么样?
而且,这在语义上意味着什么?如您所述,查询实际上是"查找文档中任何字段的值为4的文档".这有点不寻常.
您是否尝试实现特定的语义?也许文档结构的更改将为您提供所需的查询.
从 MongoDB v3.4+ 开始,您可以使用$objectToArray转换a为 kv 元组数组进行查询。
db.collection.aggregate([
{
"$addFields": {
"a": {
"$objectToArray": "$a"
}
}
},
{
$match: {
"a.v": 4
}
},
{
"$addFields": {
// cosmetics to revert back to original structure
"a": {
"$arrayToObject": "$a"
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
这是Mongo游乐场供您参考。
| 归档时间: |
|
| 查看次数: |
22059 次 |
| 最近记录: |