Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android mongodb筛选数组中与objectid关联的内容状态_Android_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Android mongodb筛选数组中与objectid关联的内容状态

Android mongodb筛选数组中与objectid关联的内容状态,android,mongodb,mongodb-query,aggregation-framework,Android,Mongodb,Mongodb Query,Aggregation Framework,我想通过过滤功能导入数据 我认为我们可能应该使用“聚合”而不是“查找” 我想要的数据的条件是: 有A集合和B集合 集合的“内容”指向B集合的“\u id” 仅当B集合的“可见性”值为“true”时,才会获取相应的值 “A”系列: { "_id" : ObjectId("aaaaa"), "title" : "study list", "contents" : [ ObjectId("11111"), ObjectId("22222") ] } { "_id" :

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

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

我想要的数据的条件是:

  • 有A集合和B集合

  • 集合的“内容”指向B集合的“\u id”

  • 仅当B集合的“可见性”值为“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") ]
    }
    
    {
       "_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
    }
    
    “B”系列:

    {
       "_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") ]
    }
    
    {
       "_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") ]
    }
    

    如何获取所需数据?

    您可以使用下面的聚合

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

    为什么输出是
    \u id:ObjectId('aaa')
    ObjectId(“bbbbb”)
    的内容也包含
    true
    value对不起,我不会说英语,底线是我想要的内容文档中有一个数组,数组有一个ObjectId,ObjectId指的是另一个集合的Id(B)只有在引用的集合B的所有“可见性”都为true时才能获取。