Mongodb 如何使用对象数组的$in运算符返回匹配文档

Mongodb 如何使用对象数组的$in运算符返回匹配文档,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,我可以知道如何在对象数组中使用$in运算符吗?并且只返回匹配文档作为结果 这是我迄今为止所尝试的,但我仍然无法得到我想要的 假设我有一组这样的文档 { "_id" : ObjectId("56824417fa32883c0335ce61"), "company_name" : "Pentagon", "deal_details" : [ { "deals_name" : "hello", "deals_tag

我可以知道如何在对象数组中使用
$in
运算符吗?并且只返回匹配文档作为结果

这是我迄今为止所尝试的,但我仍然无法得到我想要的

假设我有一组这样的文档

{
    "_id" : ObjectId("56824417fa32883c0335ce61"),
    "company_name" : "Pentagon",
    "deal_details" : [
        {
            "deals_name" : "hello",
            "deals_tag" : ["A","B","C"],
            "_id" : ObjectId("56c69da8a1f60804064abf0f")
        },
    {
            "deals_name" : "Hola",
            "deals_tag" : ["E","F","G"],
            "_id" : ObjectId("56c69da8a1f60804064abf0f")
        },
    ],
  "_id" : ObjectId("54824417fa32983c0335ce61"),
    "company_name" : "Oreo",
    "deal_details" : [
        {
            "deals_name" : "Bye",
            "deals_tag" : ["B"],
            "_id" : ObjectId("56c69da8a1f60804064abf0f")
        },
    {
            "deals_name" : "Ciao",
            "deals_tag" : ["H","I","J"],
            "_id" : ObjectId("56c69da8a1f60804064abf0f")
        },
    ]
}
我就是这么做的

User.find({
  'deal_details.deals_tags': {
    $in: ["B"]
  }
 }
}, {'deal_details':1}).exec(function(err, deal) {
  if (err) {
    return res.status(500).send(err);
  }
  res.status(200).send(deal);
});
我对
交易的期望是

            {
                "deals_name" : "hello",
                "deals_tag" : ["A","B","C"],
                "_id" : ObjectId("56c69da8a1f60804064abf0f")
            },
             {
                "deals_name" : "Bye",
                "deals_tag" : ["B"],
                "_id" : ObjectId("56c69da8a1f60804064abf0f")
            }
但是我得到了这个

            {
                "deals_name" : "hello",
                "deals_tag" : ["A","B","C"],
                "_id" : ObjectId("56c69da8a1f60804064abf0f")
            },
            {
                "deals_name" : "Hola",
                "deals_tag" : ["E","F","G"],
                "_id" : ObjectId("56c69da8a1f60804064abf0f")
            },
             {
                    "deals_name" : "Bye",
                    "deals_tag" : ["B"],
                    "_id" : ObjectId("56c69da8a1f60804064abf0f")
             },
             {
            "deals_name" : "Ciao",
            "deals_tag" : ["H","I","J"],
            "_id" : ObjectId("56c69da8a1f60804064abf0f")
             }
因此,我可以知道是否有一种方法只返回匹配的文档?
非常感谢您的帮助,谢谢

要在子文档的数组中查找具有特定值的元素(这是您的情况)并过滤结果,您应该使用聚合框架。用一个简单的查找文档是不可能的


您可以在这里看到一个问题示例:

要在子文档的数组中查找具有特定值的元素(这是您的情况)并过滤结果,您应该使用聚合框架。用一个简单的查找文档是不可能的


您可以在这里看到一个问题示例:

您可以通过


你可以通过


您好@zangw谢谢您的回复,我可以知道是否可以在$match中使用$in来匹配更多文档吗?像['B','H',然后返回匹配document@JohnLim,是的,您可以这样做,
{$match:{'deal_details.deals_tag':{$in:['B','H']}}}
Hi@zangw谢谢您的回复,我可以知道在$match中使用$in来匹配更多文档吗?像['B','H',然后返回匹配document@JohnLim,是的,你可以这样做,
{$match:{'deal_details.deals_tag':{$in:['B','H']}}
User.aggregate([{$unwind: '$deal_details'}, 
                {$match: {'deal_details.deals_tag': 'B'}}, 
                {$project: {deal_details: 1, _id: 0}}])