我在Mongo表中寻找一个值,其父键可能没有描述性或已知名称.以下是我们的文档之一的示例.
{ "assetsId": { "0": "546cf2f8585ffa451bb68369" }, "slotTypes": { "0": { "usage": "json" }, "1": { "usage": "image" } } }
我想查看它是否包含slotTypes中的"usage":"json",但我无法保证此用法的父键将为"0".
我尝试使用以下查询,没有任何运气:
db.documents.find( { slotTypes: { $elemMatch: { "usage": "json" } } } )
如果这是一个非常基本的问题,请提前抱歉,但我不习惯在nosql数据库中工作.
我不确定你是否能够用你当前的架构优雅地解决这个问题; slotTypes
应该是一个子文档数组,这将允许您的$elemMatch
查询工作.现在,它是一个带有数字键的对象.
也就是说,您的文档架构应该是这样的:
{ "assetsId": { "0": "546cf2f8585ffa451bb68369" }, "slotTypes": [ { "usage": "json" }, { "usage": "image" } ] }
如果不能更改数据布局,那么您将需要基本扫描每个文档以查找匹配项$where
.这是缓慢的,无法索引的,也很尴尬.
db.objects.find({$where: function() { for(var key in this.slotTypes) { if (this.slotTypes[key].usage == "json") return true; } return false; }})
你应该阅读关于$的文件,以确保你理解它的注意事项,并且为了所有圣洁的爱,清理你对函数的输入; 这是在数据库上下文中执行的实时代码.