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请编辑您的帖子