Mongodb 两个字段匹配的Mongo聚合

Mongodb 两个字段匹配的Mongo聚合,mongodb,Mongodb,我有一个工作聚合,其中字段和计算值之间进行了匹配。但后来我意识到我需要通过两个计算值进行搜索,所以我引入了两个新字段。我需要用这两个匹配项进行聚合,但我无法构造mongo查询。要么什么都不匹配,要么什么都匹配。我被困住了,因为我已经尝试了太多的可能性。你能找出我做错了什么吗 数据模型: db.items.find({"info.slug": "otaceni-na-dalnici"}); { "_id" : "1e44kgsl1s", "info" : { "slug" : "otaceni-n

我有一个工作聚合,其中字段和计算值之间进行了匹配。但后来我意识到我需要通过两个计算值进行搜索,所以我引入了两个新字段。我需要用这两个匹配项进行聚合,但我无法构造mongo查询。要么什么都不匹配,要么什么都匹配。我被困住了,因为我已经尝试了太多的可能性。你能找出我做错了什么吗

数据模型:

db.items.find({"info.slug": "otaceni-na-dalnici"});
{ "_id" : "1e44kgsl1s", "info" : { "slug" : "otaceni-na-dalnici"}, "votes_count" : 9 }

db.poll_votes.find({poll: "1e44kgsl1s", user: "1e41795qjw"});
{ "_id" : "1e44kgsl1s_1e41795qjw", "poll" : "1e44kgsl1s", "user": "1e41795qjw", "vote" : "dislike"}
原始查询:

db.items.aggregate([{$match: {"info.slug": "otaceni-na-dalnici"}},
{$lookup: {
    from: 'poll_votes',
    let: {poll_id: "$_id"},
    pipeline: [{$match: {$expr: {$eq: ["$_id", {$concat: ["$$poll_id", "_1e41795qjw"]}]}}}, 
    {$project: {_id: 0, vote: "$vote"}}],
    as: "me"
}}]).pretty();
及其简化的响应:

{
    "_id" : "1e44kgsl1s",
    "info" : {
            "slug" : "otaceni-na-dalnici",
    },
    "votes_count" : 9,
    "me" : [{"vote" : "dislike"}]
}
使用
轮询
用户
字段的新查询

db.items.aggregate([{$match: {"info.slug": "otaceni-na-dalnici"}},
{$lookup: {
        from: 'poll_votes', 
        let: {poll_id: "$_id"},
        pipeline: [{$match: {$expr: {$and: [{poll: "$$poll_id"}, {user: "1e41795qjw"}]}}},
        {$project: {_id: 0, vote: "$vote"}}], as: "me"
    }
}]);
但是,尽管有
$和
操作符,但它会为所有用户返回
投票

 {
 "_id": "1e44kgsl1s",
 "info": {"slug": "otaceni-na-dalnici"},
 "votes_count": 9,
 "me": [{"vote": "dislike"}, {"vote": "neutral"}, {"vote": "neutral"}, {"vote": "neutral"}, {"vote": "hate"}, {"vote": "neutral"}, {"vote": "trivial"}]
}

怎么了?我尝试设置mongo沙箱,但它无法识别我的聚合查询。以下是测试数据

db={
    "items": [
        {
            "_id": "1e44kgsl1s",
            "info": {
                "slug": "otaceni-na-dalnici"
            },
            "votes_count": 9
        }
    ],
    "poll_votes": [
        {
            "_id": "1e44kgsl1s_1e41795qjw",
            "poll": "1e44kgsl1s",
            "user": "1e41795qjw",
            "vote": "dislike"
        },
        {
            "_id": "xyz",
            "poll": "1e44kgsl1s",
            "user": "abc",
            "vote": "dislike"
        },
        {
            "_id": "ijk",
            "poll": "1e44kgsl1s",
            "user": "qwerty",
            "vote": "dislike"
        },

    ]
}

您在
$expr
中混合了普通mongo查询语言和聚合运算符

需要变量的谓词应该在
$expr
内,而普通谓词不应该:

db.items.aggregate([
    {$match: {"info.slug": "otaceni-na-dalnici"}},
    {$lookup: {
        from: 'poll_votes', 
        let: {poll_id: "$_id"},
        pipeline: [
        {$match: {$and: [
                    {$expr: {$eq:["$poll", "$$poll_id"]}}, 
                    {user: "1e41795qjw"}
        ]}}
    }},
    {$project: {_id: 0, vote: "$vote"}}], as: "me"}
}]);

游乐场中的查询正常,答案中的查询有语法错误。谢谢你的提示。我将研究一个差异。我误解了一个文档:$match阶段需要使用$expr操作符来访问变量