Mongodb - 数组查询,仅查找所有元素匹配的位置

2024-01-01

我正在尝试创建一个 mongo 查询,它将返回所有数组的特定元素设置为 false 的结果。

数据记录示例:-

images: [
    {
        id: ObjectId("516bef7fc05e877b31000000"),
        primary: true
    },
    {
        id: ObjectId("516bef2ac05e879622000000"),
        primary: false
    },
    {
        id: ObjectId("516beeb7c05e879e2a000000"),
        primary: false
    }
],
name: "test",
etc: "etc"

我只希望找到所有主字段都设置为 false 的文档,但通常(不使用查询选择器或 elemMatch)mongo 将返回此文档,因为至少有 1 个数组元素匹配。

我如何使 mongo 只返回与我的搜索参数匹配的文档?

非常感谢。


您可以使用聚合框架非常轻松地做到这一点:

db.so.aggregate( [
    { $unwind: "$images" },
    { $group: { 
        _id: '$_id', 
        all: { $sum: 1 },
        all_primary: { $sum: { $cond: [ { $eq: [ '$images.primary', true ] }, 1, 0 ] } },
        images: { $push: '$images' },
        name: { $first: '$name' },
        etc: { $first: '$etc' },
    } },
    { $project: {
        _id: 1,
        images: 1,
        name: 1,
        etc: 1,
        same: { $cond: [ { $eq: [ '$all', '$all_primary' ] }, 1, 0 ] }
    } },
    { $match: { 'same' : 1 } } 
] );

以此作为输入:

{
    "_id" : ObjectId("5203730bf8eaa52a846ebc3e"),
    "images" : [
        {
            "id" : ObjectId("516bef7fc05e877b31000000"),
            "primary" : true
        },
        {
            "id" : ObjectId("516bef2ac05e879622010000"),
            "primary" : true
        },
        {
            "id" : ObjectId("516beeb7c05e879e2a000010"),
            "primary" : true
        }
    ],
    "name" : "Derick",
    "Etc" : true
}
{
    "_id" : ObjectId("52037315f8eaa52a846ebc3f"),
    "images" : [
        {
            "id" : ObjectId("516bef7fc05e877b31000000"),
            "primary" : true
        },
        {
            "id" : ObjectId("516bef2ac05e879622010000"),
            "primary" : true
        },
        {
            "id" : ObjectId("516beeb7c05e879e2a000020"),
            "primary" : false
        }
    ],
    "name" : "James",
    "Etc" : true
}
{
    "_id" : ObjectId("520373621a78238235b6ffbf"),
    "images" : [
        {
            "id" : ObjectId("516bef7fc05e877b31000000"),
            "primary" : true
        },
        {
            "id" : ObjectId("516bef2ac05e879622010000"),
            "primary" : true
        },
        {
            "id" : ObjectId("516beeb7c05e879e2a000020"),
            "primary" : false
        }
    ],
    "name" : "James",
    "etc" : true
}
{
    "_id" : ObjectId("5203736b1a78238235b6ffc0"),
    "images" : [
        {
            "id" : ObjectId("516bef7fc05e877b31000000"),
            "primary" : true
        },
        {
            "id" : ObjectId("516bef2ac05e879622010000"),
            "primary" : true
        },
        {
            "id" : ObjectId("516beeb7c05e879e2a000020"),
            "primary" : true
        }
    ],
    "name" : "James",
    "etc" : true
}

这输出:

{
    "result" : [
        {
            "_id" : ObjectId("5203736b1a78238235b6ffc0"),
            "images" : [
                {
                    "id" : ObjectId("516bef7fc05e877b31000000"),
                    "primary" : true
                },
                {
                    "id" : ObjectId("516bef2ac05e879622010000"),
                    "primary" : true
                },
                {
                    "id" : ObjectId("516beeb7c05e879e2a000020"),
                    "primary" : true
                }
            ],
            "name" : "James",
            "etc" : true,
            "same" : 1
        },
        {
            "_id" : ObjectId("5203730bf8eaa52a846ebc3e"),
            "images" : [
                {
                    "id" : ObjectId("516bef7fc05e877b31000000"),
                    "primary" : true
                },
                {
                    "id" : ObjectId("516bef2ac05e879622010000"),
                    "primary" : true
                },
                {
                    "id" : ObjectId("516beeb7c05e879e2a000010"),
                    "primary" : true
                }
            ],
            "name" : "Derick",
            "etc" : null,
            "same" : 1
        }
    ],
    "ok" : 1
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongodb - 数组查询,仅查找所有元素匹配的位置 的相关文章

  • str_replace 为数组

    我在使用 PHP 函数时遇到一些问题str replace使用数组时 我有这样的消息 message strtolower L rzzo rwldd ty esp mtdsza d szdepw ty esp opgtw d dple 我正
  • 使用 DataContractJsonSerializer WP7 将数组解析为 Json 字符串

    如何使用 DataContractJsonSerializer 解析 Json 字符串中的数组元素 语法是 array elementsProperies SomeLiteral 您不一定使用 DataContractJsonSeriali
  • 在 PHP 中读取“分块”POST 数据

    我试图在发送时使用 Transfer Encoding chunked 从请求中读取 POST 数据 但在收到所有数据之前无法启动脚本 是否可以让 PHP能够在分块请求通过时对其做出反应吗 将 PHP 5 3 8 与 Apache 结合使用
  • Symfony - 自定义验证器和依赖注入

    我正在尝试对自定义验证器使用依赖项注入 以便能够使用实体管理器 我遵循 Symfony 示例 依赖注入 http symfony com doc current cookbook validation custom constraint h
  • 将文件中的数字读取到动态分配的数组中

    我需要一个从文件中读取成绩 整数 并返回存储它们的动态分配数组的函数 这是我尝试过的 int readGrades int grades int x scanf d x grades malloc x sizeof int return 0
  • PDO 多查询“SQLSTATE[HY000]:一般错误”

    我仍在学习 PDO 所以我可能会错过一些东西 但基本上我正在尝试将一行插入表中 然后选择生成的 id 我不确定它是否喜欢一个 pdo 语句中的两个查询 这是我用来执行 SQL 的代码 public function ExecuteQuery
  • PHP fscanf 与 fgets

    我可以使用读取一行中的整个字符串fgets but fscanf 没有这样做 根据PHP手册 fscanf 根据格式解析文件的输入 功能fscanf 类似于sscanf 但它从与句柄关联的文件中获取输入 并根据指定的格式解释输入 这在文档中
  • JQuery 验证表单数组中的重复项

    我想显示重复或不唯一的值的错误 但我的表单接受输入数组 我已经在 jsfiddle 上检查了这些问题 name week 失败但是name week 工作正常 问题1 https stackoverflow com questions 24
  • 交响乐 2 |修改具有文件(图片)字段的对象时出现表单异常

    我正在使用 Symfony2 我有一个实体Post有标题和图片字段 我的问题 当我创建帖子时一切都很好 我有我的图片等 但是当我想修改它时 我遇到了 图片 字段的问题 它是一个上传的文件 Symfony 想要一个文件类型并且它有一个字符串
  • Session_set_save_handler 未设置

    我在设置 session set save handler 时遇到问题 我将 php ini 配置为 session handler user 这个简单的测试失败了 Define custom session handler if sess
  • 如何使用多个Auth组件?

    我使用用户模型将身份验证组件配置为 管理页面 但现在 我还想为客户端创建 配置身份验证 我尝试 重写 inialize This is in my ClientsController php public function initiali
  • shell 脚本中数组的最大元素及其索引

    如何在 shell 脚本中从数组中找到最大元素及其索引 我有一个数组 a 2 2116565098 2 1238242060 2 1747941240 2 3201010162 2 3677779871 1 8126464132 2 124
  • 表单提交不起作用

    我有一张桌子 可以打印出所有可用的相机 它使用表单来更改这些设置 问题在于该表单仅更新条目中的最后一个摄像机 换句话说 如果我更改表单并为列表中的最后一个摄像机点击 应用 它将起作用 如果我更改此列表中任何其他摄像机的表单 它会将其更改为与
  • 数据库设计 - “推”模型,或写时扇出

    背景信息 我正在尝试检索我关注的人的图像 按最新时间排序 它就像 Twitter 新闻源 显示您朋友的最新动态 Plans 目前我只需要考虑一项 那就是图像 将来我计划分析用户的行为并将他们可能喜欢的其他图像添加到他们的提要中等 http
  • 在Python中随机交错2个数组

    假设我有两个数组 a 1 2 3 4 b 5 6 7 8 9 我想将这两个数组交错为变量 c 注意 a 和 b 不一定具有相同的长度 但我不希望它们以确定性的方式交错 简而言之 仅仅压缩这两个数组是不够的 我不想要 c 1 5 2 6 3
  • 在 Laravel 中使用 grpc,“未找到‘Grpc\ChannelCredentials’类”。

    我正在尝试在 Laravel 项目中使用 grpc 这是我的composer json 文件的一部分 require datto protobuf php dev master google auth 0 7 0 grpc grpc dev
  • 逻辑编程帮助

    A if infos 空和inputs empty 删除 B if infos空和inputs 空的 添加 C if infos 空和inputs 等于信息 添加 我们可以有这样的 if B it s the most common ope
  • MySql 西班牙语字符数据

    我有一个包含西班牙语字符的数据库 为了填充数据库 我从字符编码 UTF 8 的客户端页面获取值 当我在 mySql 数据库中插入值时 行包含更改的数据 例如 如果我插入 M xico 数据库中的条目是 M xico 其影响是当我对指定 M
  • PHP - While/Else 错误? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有以下
  • 相当于 JavaScript 中 Ruby 的each_cons

    许多语言都曾提出过这个问题 但 javascript 却没有 Ruby 有方法Enumerable each cons https devdocs io ruby 2 5 enumerable method i each cons看起来像这

随机推荐