我正在尝试与 Mongoose 进行聚合工作,但我遇到了问题,我得到了这个结果:
[
{
_id: new ObjectId("630bb658370cc689973c5bb4"),
isRead: true,
user: new ObjectId("630273bbe0f3f82d85b149bd"),
globalRef: new ObjectId("630bb649370cc689973c5b62"),
},
{
_id: new ObjectId("630bb649370cc689973c5b62"),
isRead: false,
},
{
_id: new ObjectId("6306bcf16fa60080148fefb6"),
isRead: false,
},
{
_id: new ObjectId("630273bbe0f3f82d85b149bd"),
isRead: false,
user: new ObjectId("630273bbe0f3f82d85b149bd")
},
{
_id: new ObjectId("6306bcf16fa60080148fefb7"),
isRead: true,
user: new ObjectId("630273bbe0f3f82d85b149bd")
}
]
我们可以看到第一个元素对第二个元素有一个引用 (globalRef
),
如果存在另一个元素并以后者作为引用,我想删除元素,这可以通过 $match 实现吗? $组? $项目? $过滤器?
期望的结果:
[
{
_id: new ObjectId("630bb658370cc689973c5bb4"),
isRead: true,
user: new ObjectId("630273bbe0f3f82d85b149bd"),
globalRef: new ObjectId("630bb649370cc689973c5b62"),
},
{
_id: new ObjectId("6306bcf16fa60080148fefb6"),
isRead: false,
},
{
_id: new ObjectId("630273bbe0f3f82d85b149bd"),
isRead: false,
user: new ObjectId("630273bbe0f3f82d85b149bd")
},
{
_id: new ObjectId("6306bcf16fa60080148fefb7"),
isRead: true,
user: new ObjectId("630273bbe0f3f82d85b149bd")
}
]
感谢您的帮助
最佳答案
查询
- 您可以使用
globalRef
进行自查找_id
(使 globalRef 上的索引更快) - 加入后,如果结果为空(未找到匹配项),则保留文档
- 取消设置以删除结果字段
coll.aggregate(
[{"$lookup":
{"from": "coll",
"localField": "_id",
"foreignField": "globalRef",
"as": "results"}},
{"$match": {"$expr": {"$eq": ["$results", []]}}},
{"$unset": ["results"]}])
关于database - 聚合以过滤 MongoDB 中的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73522687/