json - 在 mongodb 中使用 $or 与嵌套的对象数组
问题描述
我有以下收藏
[
{"overlaps": [{"BB1": "itemA", "iou": 0.1, "BB2": "itemB"},{"BB1": "itemB", "iou": 0.4, "BB2": "itemC"}], "City": "Paris", "mode": "RGB","path": "photo1.png"},
{"overlaps": [{"BB1": "itemA", "iou": 0.5, "BB2": "itemC"}], "City": "London", "mode": "RGB","path": "photo2.png"},
{"overlaps": [{"BB1": "itemB", "iou": 0.8, "BB2": "itemB"}], "City": "London", "mode": "greyscale","path": "photo3.png"},
{"overlaps": [{"BB1": "itemA", "iou": 0.2, "BB2": "itemC"},{"BB1": "itemA", "iou": 0.8, "BB2": "itemC"}], "City": "Berlin", "mode": "RGB","path": "photo4.png"},
{"overlaps": [{"BB1": "itemA", "iou": 0.9, "BB2": "itemB"}], "City": "NY", "mode": "greyscale","path": "photo5.png"},
{"overlaps": [{"BB1": "itemA", "iou": 0.8, "BB2": "itemB"}], "City": "Roma", "mode": "RGB","path": "photo6.png"}
]
我想检索那些
有城市=柏林
或有模式=灰度
OR 计算 "BB1":"itemA" 和 "BB2":"itemC" 之间至少有一个重叠
前两个条件很简单:
cursor = record1.find({"$or": [{"City":"Berlin"},{"mode":"greyscale"}]})
如何将第三个条件添加到查询中?
解决方案
您需要有条件申请才能$elemMatch
获得$or
结果
db.collection.find({
$or: [{ City: "Berlin" }, { mode: "greyscale" },
{
overlaps: {
$elemMatch: {
$or: [
{
BB1: "itemA",
BB2: "itemC"
}
]
}
}
}
]
})
推荐阅读
- azure - 将 DataFrame 从 Databricks 写入 Data Lake
- php - 如何使用 bash 脚本自动将密码短语输入到 docker 容器中?
- r - R:获取2个变量值以占用由新行分隔的单个单元格
- c# - EMGU CV 随机冻结系统,在控制台上抛出奇怪的错误
- javascript - JavaScript / Jquery 用 gif 交换 img png 源
- android - 如何在不点击屏幕的情况下放置对象
- bash - 将 4 个文件合并为 1 个具有不同列的文件
- java - 无法理解数组边界
- sql - Excel VBA - 记住 SQL ODBC 用户/密码
- php - 在 .htaccess 中为 LiteSpeed 缓存获取 PHP $_SESSION 数据