从嵌套的mongodb集合中获取数据

时间:2012-08-10 13:59:55

标签: mongodb

我有一个如下的集合。我想仅在fb user_id为2001的情况下获取用户数据。

我如何在PHP中执行此操作?

{
"_id": ObjectId("5024db89b7ac1c900e000000"),
"title": "This is a title",

"users": [
            {
              "name": "John",
              "email": "john@example.com",
              "fb_user_id": "1000"
            },
            {
              "name": "Jack",
              "email": "jack@example.com",
              "fb_user_id": "2001"
            },

        ]

}

2 个答案:

答案 0 :(得分:2)

您可以使用以下mongodb查询

{ "title.users.fb_user_id" : 2001 }

我可以使用elemMatch查询运算符

进行更复杂的查询
{ 
   "title.users" : {$elemMatch : { "fb_user_id" : 2001, "name" : "John" } }
}

这样的事情。希望它有所帮助

答案 1 :(得分:1)

如果您只想返回嵌入数组中找到的一个匹配项(而不是数组的其余部分),则需要:

  • 在您的应用程序代码中处理此问题(迭代users数组并找到匹配的元素)

  • 使用2.2版MongoDB中提供的新位置运算符支持(SERVER-828)。

使用mongo 2.2 shell中的位置运算符的示例:

> db.mycoll.find({'users.fb_user_id':"2001"}, {_id:0, 'users.fb_user_id.$':1})
{
    "users" : [
        {
            "name" : "Jack",
            "email" : "jack@example.com",
            "fb_user_id" : "2001"
        }
    ]
}