在 MongoDB 中设置嵌套数组的过滤条件


若要设置过滤条件,请在 MongoDB aggregate() 中使用 $filter 和 $cond。 $filter 根据指定条件选择要返回的数组的一个子集。让我们创建一个包含文档的集合 -

> db.demo725.insertOne(
...    {
...
...       "details": {
...
...          "userMessages": [
...             {
...                "Messages": [
...                   { "Message": "Hello" },
...                   { "Message": "How" },
...                   { "Message": "are" }
...                ]
...
...             },
...             {
...                "Messages": [
...                   { "Message": "Good" },
...                   { "Message": "Bye" }
...
...                ]
...             },
...             {
...                "Messages": [
...                   { "Message": "Hello" },
...                   { "Message": "Bye" }
...
...                ]
...
...             }
...          ]
...       }
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5eab16cd43417811278f5893")
}

在集合中显示所有文档,借助 find() 方法 -

> db.demo725.find();

这将生成以下输出 -

{ "_id" : ObjectId("5eab16cd43417811278f5893"), "details" : { "userMessages" : [ { "Messages" : [ { "Message" : "Hello" }, { "Message" : "How" }, { "Message" : "are" } ] }, { "Messages" : [ { "Message" : "Good" }, { "Message" : "Bye" } ] }, { "Messages" : [ { "Message" : "Hello" }, { "Message" : "Bye" } ] } ] } }

以下是设置嵌套数组过滤条件的查询 -

> db.demo725.aggregate([
...    {
...       $addFields: {
...          "details.userMessages": {
...             $filter: {
...                input: "$details.userMessages",
...                as: "out",
...                cond: {
...                   $anyElementTrue: {
...                      $map: {
...                         input: "$$out.Messages",
...                         in: { $gte: [ { $indexOfBytes: [ "$$this.Message", "Hello" ] }, 0 ] }
...                      }
...                   }
...                }
...             }
...          }
...       }
...    }
... ]).pretty()

这将生成以下输出 -

{
   "_id" : ObjectId("5eab16cd43417811278f5893"),
   "details" : {
      "userMessages" : [
         {
            "Messages" : [
               {
                  "Message" : "Hello"
               },
               {
                  "Message" : "How"
               },
               {
                  "Message" : "are"
               }
            ]
         },
         {
            "Messages" : [
               {
                  "Message" : "Hello"
               },
               {
                  "Message" : "Bye"
               }
            ]
         }
      ]
   }
}

更新于:15-May-2020

1K+ 浏览

开启您的 职业生涯

完成课程后可获得认证

开始
广告