来自子阵列的Mongo查询项,有麻烦

时间:2013-08-08 22:34:26

标签: arrays mongodb

我对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,因记录而异。

如果有任何人有任何见解并可以帮助我解决这个问题,我将不胜感激。谢谢!

1 个答案:

答案 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运营商不使用索引。