我对mongodb比较陌生,我进入这家公司的设置,已经设置并运行了数据库。在我看来,这个“数组”的结构实际上并不是一个合适的数组。他们正在“offer_info_array”中保存我需要的信息 - 然后它有一个嵌套数组,其中“offer id”在记录之间发生了很大的变化,然后嵌套在里面,这就是我需要选择的信息。这是一个记录的例子。
{
"_id" : ObjectId("52041af3bbf8057203000004"),
"offer_info_array" : {
"128" : {
"affid" : "68",
"s1" : "YJF"
}
},
"city" : "Cleveland",
"state" : "OH",
"zip" : "44111"
}
所以从像这样的记录的整个数据库中,我需要找到所有具有“68”“affid”的记录 - 我意识到这个数据库的结构不正确,但是我没有太多可以做的已存在的记录。 “128”是要约ID,因记录而异。
如果有任何人有任何见解并可以帮助我解决这个问题,我将不胜感激。谢谢!
答案 0 :(得分:3)
您可以使用接受JavaScript功能的$where运算符:
db.items.find({$where: function() {
for(var key in obj.offer_info_array)
if(obj.offer_info_array[key].affid == 68)
return true;
return false; }})
此函数查找offer_info_array
对象的属性,并按键获取属性值。然后我们验证属性值是否具有等于68的affid
属性。如果是,我们返回true
,这意味着对象匹配我们的查询。如果没有affid
等于68的属性,我们会返回false
。
请记住,$ where运营商不使用索引。