mongodb - 在 MongoDB 中查找作为名称/值对而不是数组元素的值的子文档
问题描述
也许我的文档结构不太适合我正在尝试做的事情,但经过一段时间的努力,我意识到$elemMatch
可能不会成为我的朋友。这是一个示例文档:
{
"field": {
"abc": {
x: 0,
str: "aaa"
},
"def": {
x: 1,
str: "bbb"
},
"ghi": {
x: 2,
str: "ccc"
}
}
}
我正在尝试构建一个查询,以查找满足“field.$.x > 1”或任何程度的文档。基本上,第二级字段的名称可以是任何名称。如果field
是一个数组,我猜它$elemMatch
会很好地工作。
解决方案
由于您不知道键的名称,因此您必须使用$objectToArray它将转换field
为三个键值对的数组。然后你可以运行$map来应用你的条件x
和$anyElementTrue来检查是否有任何项目符合指定的条件:
db.collection.find({
$expr: {
$anyElementTrue: {
$map: {
input: { $objectToArray: "$field" },
in: { $gt: [ "$$this.v.x", 1 ] }
}
}
}
})
推荐阅读
- mongodb - Issues with geo indexes in mongodb
- android - Why configure Cordova config.xml if I already have a CSP in index.html
- php - Laravel - PDF: Cannot encode text from PDF to Text
- python - 如何从固定集合生成所有不同的固定大小的二维数组?
- java - Thread pool to create set number of threads per second
- javascript - Imacros javascript宏在关闭浏览器后执行命令
- c# - 如何使用 C# 代码从 Windows Server 发布的 Web 应用程序发送和查看电子邮件
- python - 下载文件时如何在每个块之后提交/写入数据,以便它不会使用所有内存?
- asp.net-core - Dotnet 核心自动映射器 orderItems
- python - Geopandas shapefile 轴与实际图片的比例不同