我有两个集合,用户和用户活动记录。我的用户集合很简单:
{
"_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是用户文档的外键。
I,作为用户(Ex _id:20)我正在执行查询。我想查询用户集合并查找具有某些字段(城市、姓名等)的用户,以及不包含我的任何注册表的用户(user _id:20)在他的记录数组中。
知道怎么做吗?我试过用$lookup和其他操作符,但没有运气。提前感谢
2条答案
按热度按时间z5btuh9x1#
如果需要检查
records
字段中是否不存在任何筛选的用户,可以执行以下简单的聚合:MongoPlayground
rsaldnfx2#
首先,创建一个容易读取的外键,这样即使你复制粘贴它,也不会很难。
数据库.用户.聚合([{$lookup:{从:“记录”,本地字段:“_id”,外部字段:“用户ID”,作为:“用户”}}])
函数将对此起作用。您似乎没有注意到记录集合的“userId”与用户集合的“_id”字段不匹配。
查看您的ID(_I):对象ID(“5 f0 b29 c78 f491172 cfe 8b 049”)
查看您的用户ID:对象ID(“5 f0 b29 c78 f491172 cfe 8b 04 a”)
我希望你注意到049已经被04 a取代了
检查一下,你会找到你的答案:)