javascript - 比较 MongoDB 中的两个未排序集合
问题描述
我正在尝试比较两个集合中的大量文档。为了给你一个估计,我在这两个集合中的每个集合中都有大约 1300 个文档。
我想在比较两个集合后生成一个差异比较报告。我不需要确切指出缺少什么或添加了哪些新内容,我只需要能够确定两个文档之间实际上存在一些差异。是的,除了 Mongo 的ObjectId ("_id")
.
注意:我使用非规范化数据模型实现了数据库,这意味着我嵌入了文档(文档中的文档)。
你会说什么是实现相同解决方案的最佳方式?
提前感谢您的时间撒玛利亚人!
解决方案
您应该在您关心的所有字段上使用$lookup和 $eq。
db.collection1.aggregate([
{
$lookup:
{
from: "collection2",
let: { unique_id: "$unique_id", field1: "$field", field2: "$field", ... },
pipeline: [
{ $match:
{ $expr:
{ $and:
[
{ $eq: [ "$unique_id_in_2", "$$unique_id" ] }
{ $eq: [ "$field_to_match", "$$field1" ] },
{ $eq: [ "$field_to_match.2", "$$field2" ] }
]
}
}
},
],
as: "matches"
}
},
{
$match: {
'matches.0': {$exists: false}
}
}
])
** 用于查找的 mongo 3.6+ 语法。
推荐阅读
- android - Android Jetpack Paging 3:带 Room 的 PagingSource
- node.js - 如何在 60 天后的某个时间后在 mongoDB 服务器中自动运行某些东西并在没有任何用户交互的情况下更改文档的值
- docker - Kubernetes 应用服务,但端点没有
- cmake - cmake target_include_directories PUBLIC 不适用于对象库
- javascript - 如何从字符串中删除特定字母
- c# - PipeParser 无法解析 HL7 消息
- javascript - Discord Bot - 从网站下载 JSON 文件并提取其中的某些元素
- spring - 在名称为“appServlet”的 DispatcherServlet 中找不到具有 URI [/] 的 HTTP 请求的映射
- django - 如何在 Django Rest Framework 中删除 fk 记录
- python-3.x - 无法使用 Pandas 将文本格式转换为正确的数据框