MongoDB:查询集合并按另一个集合中的数组进行筛选

MongoDB:查询集合并按另一个集合中的数组进行筛选,mongodb,collections,mongodb-query,aggregation-framework,lookup,Mongodb,Collections,Mongodb Query,Aggregation Framework,Lookup,我有两个集合,用户和用户活动记录。 我的用户收藏很简单: { "_id" : ObjectId("5f0b29c78f491172cfe8b049"), "created" : ISODate("2020-07-12T15:18:31.319+0000"), "lastLogin" : ISODate("2020-07-12T

我有两个集合,用户和用户活动记录。 我的用户收藏很简单:

    { 
        "_id" : ObjectId("5f0b29c78f491172cfe8b049"), 
        "created" : ISODate("2020-07-12T15:18:31.319+0000"), 
        "lastLogin" : ISODate("2020-07-12T15:18:31.319+0000"), 
        "name" : {
            "first" : "Pedro", 
            "last" : "Perez"
        },
        "city" : "New York"
}
以及档案收集:

{ 
    "_id" : ObjectId("5f0fb901b320f5ec21269279"), 
    "userId" : ObjectId("5f0b29c78f491172cfe8b04a"), 
    "record" : [
        {
            "user" : ObjectId("5f0b29c78f491172cfe8b049"), 
            "name" : "Pedro", 
            "type" : "like"
        }, 
        {
            "user" : ObjectId("5f0b29c78f491172cfe8b04b"), 
            "name" : "Rivaldo", 
            "type" : "fold"
        }
    ]
}
在这种情况下,userId是用户文档的外键

一、 作为用户(Ex_id:20),我正在执行查询。我想查询users集合并查找具有特定字段(城市、名称等)的用户,以及在其记录数组中不包含任何我的注册表(用户id:20)的用户

知道怎么做吗?我尝试过$lookup和其他操作符,但没有成功。
提前感谢

如果您需要检查
记录
字段中是否不存在任何筛选用户,您可以执行以下简单聚合:

db.users.aggregate([
  {
    $match: {
      "name.last": "Perez"
    }
  },
  {
    $lookup: {
      from: "articles",
      localField: "_id",
      foreignField: "records.user",
      as: "users"
    }
  },
  {
    $match: {
      users: {
        $size: 0
      }
    }
  }
  //Remove extra field
  //,{
  //  $unset: "users"
  //}
])

你好@Valijon。是的,或多或少是这个想法,但有一个细节。我想检查记录数组中是否不存在某个用户(通过参数传递,通过_id传递),而不是查找的当前用户。因此,如果该用户在数组中不存在并且匹配字段正确,那么我将返回当前用户。可能我在问题中没有正确地解释自己。@carrasc0如果你用例子解释这个细节就好了,因为
当前用户在那里不存在
我解释为过滤用户没有问题。情况是这样的:作为用户20,我正在执行查询。我想查询users集合并查找具有特定字段(城市、名称等)的用户,以及在其记录数组中不包含任何我的注册表(用户20)的用户。当我说“当前用户”时,我指的是执行查询的用户,我需要检查的用户在过滤用户的记录数组中不存在。我为错误的解释道歉。@carrasc0请编辑您的帖子