首页 > 解决方案 > mongodb过滤数组中objectid关联的内容状态

问题描述

我想通过过滤功能导入数据。

我认为我们可能应该使用“聚合”而不是“查找”。

我想要的数据的条件是:

  1. 有 A 集合和 B 集合。

  2. A Collection 的“内容”指向 B Collection 的“_id”。

  3. 仅当 B Collection 的“Visibility”值为“true”时,才会获取相应的值。

“A”系列:

{
   "_id" : ObjectId("aaaaa"),
    "title" : "study list",   
    "contents" : [ ObjectId("11111"), ObjectId("22222") ]
}
{
   "_id" : ObjectId("bbbbb"),
    "title" : "study list",   
    "contents" : [ ObjectId("33333"), ObjectId("44444") ]
}
{
   "_id" : ObjectId("ccccc"),
    "title" : "study list",   
    "contents" : [ ObjectId("55555") ]
}

“B”系列:

{
   "_id" : ObjectId("11111"),
    "visibility" : true
}
{
   "_id" : ObjectId("22222"),
    "visibility" : true
}
{
   "_id" : ObjectId("33333"),
    "visibility" : true
}
{
   "_id" : ObjectId("44444"),
    "visibility" : false
}
{
   "_id" : ObjectId("55555"),
    "visibility" : false
}

== 数据结果

{
   "_id" : ObjectId("aaaaa"),
    "title" : "study list",   
    "contents" : [ ObjectId("11111"), ObjectId("22222") ]
}

我怎样才能得到我想要的数据?

标签: androidmongodbmongodb-queryaggregation-framework

解决方案


您可以使用以下聚合

db.collectionA.aggregate([
  { "$lookup": {
    "from": "collectionB",
    "localField": "contents",
    "foreignField": "_id",
    "as": "data"
  }},
  { "$match": {
    "data": {
      "$not": {
        "$elemMatch": { "visibility": false }
      }
    }
  }}
])

推荐阅读