mongodb - 检查数组中的所有元素是否具有 mongodb 中某个字段的值
问题描述
我需要验证每个文档的 baz 字段值是否相同。
结构看起来像这样。
{
_id : 111111,
foo : 123123,
bar : [
{
subId : 121212,
baz : abc123
},
{
subId : 131313,
baz : abc123
},
]
},
{
_id : 222222,
foo : 234234,
bar : [
{
subId : 212121,
baz : def456
},
{
subId : 313131,
baz : def456
},
]
},
基本上我只需要确保对于每个文档,baz 应该始终相同。我该如何查询呢?
解决方案
试试这个:
db.allSame.aggregate([
{
$addFields: {
"uniqueBazCount": {
$sum: {
$map: {
input: "$bar",
as: "item",
in: {
$cond: [{ $eq: ["$$item.baz", { $arrayElemAt: ["$bar.baz", 0] }] }, 0, 1]
}
}
}
}
}
},
{
$match: { uniqueBazCount: 0 }
}
]);
要获取具有不同值的文档,更改$match
如下:
{
$match: {
uniqueBazCount: { $gt: 0 }
}
}
推荐阅读
- r - 使用 dplyr mutate 在 RMarkdown 中使用 extraKable 为 pdf 着色表?
- wpf - 在 Visual Studio 2017 中制作 WPF 安装程序
- fortran - 如何在子程序/函数中传递函数名
- sql-server - 没有使用 WHILE 函数插入记录以生成多条新记录
- javascript - 过滤 DynamoDB 查询以排除值(DynamoDB、Javascript)
- javascript - 可以修改此脚本以使其切换到页面的链接吗?
- c# - 以 Windows 用户身份启动浏览器进程
- r - 带有 xreg 的 auto.arima 在 do.call 中不起作用
- c++ - 为什么 [[nodiscard]] 不适用于参考?
- java - 获取数组中连续元素之间的绝对差值,并返回出现最多的差值