1

我对 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。

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

4

1 回答 1

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对象的属性并按键获取属性的值。然后我们验证属性值是否具有affid等于 68 的属性。如果是,我们返回true这意味着对象与我们的查询匹配。如果没有affid等于 68 的属性,我们返回false

请记住,$where 运算符不使用索引。

于 2013-08-08T23:23:32.950 回答