mongodb - 如何仅获取不包含在另一条记录的数组中的记录
问题描述
我正在尝试从 MongoDB 中检索未在另一个文档的数组字段中引用的所有记录。我有以下格式的数据:
[
{ "domain": "foo.com", "altNames": [] },
{ "domain": "bar.com", "altNames": [] },
{ "domain": "zaz.com", "altNames": ["foo.com", "bar.com"]},
{ "domain": "baz.com", "altNames": ["boo.com"]}
]
从这些数据中,我想检索具有域的记录,zaz.com
并且baz.com
由于它们domain
不在另一个记录altNames
数组中。
解决方案
执行自查并检查结果数组是否为空
db.collection.aggregate([
{
"$lookup": {
"from": "collection",
let: {
d: "$domain"
},
pipeline: [
{
"$match": {
$expr: {
$in: [
"$$d",
"$altNames"
]
}
}
},
{
$limit: 1
}
],
"as": "altNamesLookup"
}
},
{
"$match": {
altNamesLookup: []
}
},
{
"$project": {
altNamesLookup: false
}
}
])
这是Mongo游乐场供您参考。
推荐阅读
- node.js - 从节点服务器流式传输图像数据会导致文件损坏 (gridfs-stream)
- python - 每第 N 次迭代写入不同的文件?
- r - .Rprofile 没有来源
- swift - 为什么更新视图时我的数组是空的?(迅速)
- server-side - Gtag.js optmize server_side 实现不起作用
- php - 我正在使用 foreach 遍历一个数组并向每个号码发送短信,但不能这样做。它只发送给一个
- javafx - 向应用程序中的多个场景添加 CSS
- grails - 是否有将 Java Struts 1 应用程序转换为 Grails 的已知过程
- java - 相同的代码在 java 中有效,但在 android 中无效
- python-3.x - LaTeX 无法在 python 中处理字符串