我正在try 使用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?$group?$project?$Filter实现吗?

预期结果:

[
   {
     _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进行self 查找_id(在global alRef上创建索引是为了更快)
  • 联接后,如果结果为空(未找到匹配项),则保留文档
  • 取消设置以删除结果字段

Playmongo

coll.aggregate(
[{"$lookup": 
   {"from": "coll",
    "localField": "_id",
    "foreignField": "globalRef",
    "as": "results"}},
 {"$match": {"$expr": {"$eq": ["$results", []]}}},
 {"$unset": ["results"]}])

Database相关问答推荐

为Postgres数据库字段创建复合索引

如何使一个IP允许在运行GitHub操作到RDS数据库时,您不允许从外部访问数据库?

Android Room持久性库@Update不起作用

Spring Boot:如何使用多个模式并在运行时动态 Select 使用哪一个

如何将 MySQL Workbench 连接到 Amazon RDS?

如何在 Play 2.0 中 for each 环境设置不同的数据库?

是否可以在ORDER BY子句之后放置任何可能造成安全风险的内容?

在 SQL Server 2005 中将数据库从一个驱动器移动到另一个驱动器的正确方法是什么?

在 iphone 上本地存储数据

SQLite同时读写

没有自动增量的sqlalchemy主键

显式事务回滚是否必要?

从原始物理文件中恢复 postgreSQL 数据库

如何在 SQL Server 中生成并手动插入唯一标识符?

如何在 Google AppEngine 上实现自动增量

Codeigniter - 使用多个数据库

xampp phpmyadmin,格式参数不正确

从 SQLite 导出到 SQL Server

如何安装/更新到 Postgres 9.4?

什么是数据库中的父表和子表?