从多个子文档中获取与mongodb中的条件匹配的字段

从多个子文档中获取与mongodb中的条件匹配的字段,mongodb,Mongodb,下面是我在mongodb的收藏- { "_id" : ObjectId("50f69176904e1d66affec20d"), "connections" : [ { "id" : "50f651a3b58bba7fbec2f222" }, { "group" : "Roomies", "users" : [ { "id" : "50f651a3b58bba7fbec

下面是我在mongodb的收藏-

{
    "_id" : ObjectId("50f69176904e1d66affec20d"),
    "connections" : [
    {
        "id" : "50f651a3b58bba7fbec2f222"
    },
    {
        "group" : "Roomies",
        "users" : [
        {
            "id" : "50f651a3b58bba7fbec2f222"
        },
        {
            "id" : "50f651b8b58bba7fbec2f223"
        }
        ]
    },
    {
        "group" : "College",
        "users" : [
        {
            "id" : "50f651b8b58bba7fbec2f223"
        },
        {
            "id" : "50f651a3b58bba7fbec2f222"
        }
        ]
    },
    {
        "group" : "Work",
        "users" : [
        {
            "id" : "50f651a3b58bba7fbec2f222"
        }
        ]
    },
],
"email" : "arunko350@gmail.com",
"name" : "Arun"
}

在这里,我想获得id=50f651a3b58bba7fbec2f222存在的所有组名。请帮帮我。我正在浏览两天的解决方案。

$elemMatch操作符可用于阵列元素上的投影

以下内容应该可以

var projection = {"connections.group":1, "connections":{$elemMatch: {"users.id":"507c35dd8fada716c89d0013"}}}

db.collection.find( {{"connections.users.id": "507c35dd8fada716c89d0013"}}, projection);

您可以使用MongoDB 2.2实现这一点。在外壳中:

db.test.aggregate([
//复制文档,每个连接数组元素一个。
{$unwind:'$connections'},
//仅包括具有指定用户id的文档
{$match:{'connections.users.id':'50f651a3b58bba7fbec2f222'},
//将组带出到唯一的顶级字段并排除_id
{$project:{{u id:0,组:'$connections.group'}}
])
产出:

{
“结果”:[
{
“组”:“室友”
},
{
“组”:“学院”
},
{
“组”:“工作”
}
],
“好”:1
}

如果您修复了问题中文档的缩进,将会有所帮助。嘿@johnyhk。我已经缩进了代码。请检查一下。谢谢。我得到这个错误:>db.users.find({“connections.users.id”:“50f651b8b58bba7fbec2f223”},{“connections.group”:1,“connections.users”:{$elemMatch:{“id”:“50f651b8b58bba7fbec2f223”});错误:{“$err”:“无法在嵌套字段上使用$elemMatch投影(当前不支持)。”,“code”:16344}我更新了投影以使其可用。但这也将只返回数组中的一个元素,因为elemMatch操作符只从数组中选择一个元素。抱歉,兄弟,此问题似乎有未解决的问题:。现在,您可以检索与查询匹配的文档,并通过迭代文档手动提取组名。好运气的人。你知道锂框架吗?我明白了。如果你能把它转换成锂语法,那会很有帮助。不,我不知道锂语法。嘿,谢谢你,约翰尼。它是有效的:)。你对锂框架有什么想法吗?我很难将此命令转换为特定于锂的命令。@Arunko。酷。对不起,我没有使用锂框架。