MongoDB 查詢以交集方式匹配文件針對某個欄位


為此,請使用 aggregate()。我們先建立一個包含文件的集合 -

> db.demo393.insertOne(
...    {
...       Id1: "1",
...       Name: "Chris",
...       Id2: "100"
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5e6dd522064be7ab44e804")
}
> db.demo393.insertOne(
...    {
...       Id1: "1",
...       Name: "Chris",
...       Id2: "101"
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5e6dd522064be7ab44e805")
}
> db.demo393.insertOne(
...    {
...       Id1: "3",
...       Name: "Chris",
...       Id2: "100"
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5e6dd522064be7ab44e806")
}
> db.demo393.insertOne(
...    {
...       Id1: "3",
...       Name: "Mike",
...       Id2: "101"
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5e6dd522064be7ab44e807")
}

藉助 find() 方法顯示集合中的所有文件 -

> db.demo393.find();

這將生成以下輸出 -

{ "_id" : ObjectId("5e5e6dd522064be7ab44e804"), "Id1" : "1", "Name" : "Chris", "Id2" : "100" }
{ "_id" : ObjectId("5e5e6dd522064be7ab44e805"), "Id1" : "1", "Name" : "Chris", "Id2" : "101" }
{ "_id" : ObjectId("5e5e6dd522064be7ab44e806"), "Id1" : "3", "Name" : "Chris", "Id2" : "100" }
{ "_id" : ObjectId("5e5e6dd522064be7ab44e807"), "Id1" : "3", "Name" : "Mike", "Id2" : "101" }

以下是交集方式匹配文件針對某個欄位的查詢 -

> db.demo393.aggregate([
...    { "$match": { "Name": "Chris" } },
...    { "$group": {
...       "_id": "$Id1",
...       "docs": { "$push": "$$ROOT" },
...       "count": { "$sum": 1 }
...    }},
...    { "$match": {
...       "count": { "$gt": 1 },
...       "docs": {
...          "$all": [
...             { "$elemMatch": { "Id2": "100" } },
...             { "$elemMatch": { "Id2": "101" } }
...          ]
...       }
...    }}
... ])

這將生成以下輸出 -

{ "_id" : "1", "docs" : [ { "_id" : ObjectId("5e5e6dd522064be7ab44e804"), "Id1" : "1", "Name" : "Chris", "Id2" : "100" }, { "_id" : ObjectId("5e5e6dd522064be7ab44e805"), "Id1" : "1", "Name" : "Chris", "Id2" : "101" } ], "count" : 2 }

更新於: 2020 年 4 月 2 日

314 次瀏覽

開啟您的職業生涯

完成課程獲取認證

開始
廣告