Mongodb查询选择嵌入文档

Mongodb查询选择嵌入文档,mongodb,mongodb-query,Mongodb,Mongodb Query,我有以下Mongodb文档。要获取参与者='xxx'和(message.touserid='xxx'或message.fromuserid='xxx')的文档 我使用以下查询,但它返回的是所有消息,而不是一条。你能告诉我如何达到这个结果吗 {“$and”:[{“参与者”:{“$regex”:“56d314a8e4b04d7f98cfd0c6”},$or:[{“messages.touserId”:“56d314a8e4b04d7f98cfd0c6”},{“messages.formuserId”

我有以下Mongodb文档。要获取参与者='xxx'和(message.touserid='xxx'或message.fromuserid='xxx')的文档

我使用以下查询,但它返回的是所有消息,而不是一条。你能告诉我如何达到这个结果吗

{“$and”:[{“参与者”:{“$regex”:“56d314a8e4b04d7f98cfd0c6”},$or:[{“messages.touserId”:“56d314a8e4b04d7f98cfd0c6”},{“messages.formuserId”:“56d314a8e4b04d7f98cfd0c6”}字段:{“id”:“0”,“产品”:“0”,“参与者”:“0”,“消息”:“0”}


由于这是元素上的复杂匹配-
$elemMatch
在这种情况下不能使用, 因此,聚合框架是一个助手

    var match = {
    $match : {
        participants : /56d314a8e4b04d7f98cfd0c6/
    }
}
var unwind = {
    $unwind : "$messages"
}
var matchSecond = {
    $match : {
        $or : [{
                "messages.touserId" : "56d314a8e4b04d7f98cfd0c6"
            }, {
                "messages.formuserId" : "56d314a8e4b04d7f98cfd0c6"
            }
        ]
    }
}
var projection = {
    $project : {
        _id : 0,
        messages : 1
    }
}
db.deb.aggregate([match, unwind, matchSecond, projection])
和输出:


谢谢你的回复。但我也想从讨论文档中选择一些元素。可以使用单个查询完成吗?如果是,如何使用?还有什么方法可以在消息上使用切片selection@Debopam从聚合中删除最后一个
projection
,然后查看文档的形状。@Debopam,只要您对数组字段使用OR,简单查询将需要使用ForEach和array ITERATION来选择匹配的子项
    var match = {
    $match : {
        participants : /56d314a8e4b04d7f98cfd0c6/
    }
}
var unwind = {
    $unwind : "$messages"
}
var matchSecond = {
    $match : {
        $or : [{
                "messages.touserId" : "56d314a8e4b04d7f98cfd0c6"
            }, {
                "messages.formuserId" : "56d314a8e4b04d7f98cfd0c6"
            }
        ]
    }
}
var projection = {
    $project : {
        _id : 0,
        messages : 1
    }
}
db.deb.aggregate([match, unwind, matchSecond, projection])
{
    "messages" : {
        "_id" : {
            "oid" : "574eb874027520c2158268d2"
        },
        "formuserId" : "56841002eceefce22f455c7f",
        "fromuser" : "9674642375",
        "touserId" : "56d314a8e4b04d7f98cfd0c6",
        "touser" : "debopam_r",
        "message" : "Creating Discussion",
        "isMute" : false,
        "index" : 1.0,
        "createDate" : {
            "date" : "2016-06-01T10:27:00.500Z"
        },
        "lastModifiedDate" : {
            "date" : "2016-06-01T10:27:00.501Z"
        },
        "createdBy" : "9674642375",
        "lastModifiedBy" : "9674642375"
    }
}