集合的每个文档中的MongoDB过滤器数组字段

用户名

我有一个MongoDB collection其结构是这样的:

/* 1 */
{
    "_id" : ObjectId("5c09a454dd42360001fd2515"),
    "conversations" : {
        "0" : {
            "message" : "Message 1",
              .
              .
              .
        },
        "1" : {
            "message" : "Message 1"
               .
               .
               .
        },
        "2" : {
            "message" : "Message 5"
              .
              .
              .
        },
        "3" : {
            "message" : "Message 1"
              .
              .
              .
        },
        "4" : {
            "message" : "Message 2"
              .
              .
              .
        },
        "5" : {
            "message" : "Message 3"

        },
        "6" : {
            "message" : "compliance"

        },
        "7" : {
            "message" : "Google"

        }
}

/* 2 */
{
    "_id" : ObjectId("5c09a673c2a98f00012f4efb"),

    "conversations" : {
        "0" : {
            "message" : "Message 11"

        },
        "1" : {
            "message" : "Google",

        },
        "2" : {
            "message" : "Message 7"

        }
}

/* 3 */
{
    "_id" : ObjectId("5c09f570173f7900015a82b2"),

    "conversations" : {
        "0" : {
            "message" : "Message 4"
        },

}

.
.
.

在上述示例数据中,我在中有一组文档,collection并且每个文档中都有一个名为的字典字段数组conversations在这个领域我已经词典字段列表(012...)。我想做的是过滤所有文档,每个conversations字段中的message值为Message 4

我知道在每个文档中过滤特定字段的方法是db.getCollection('collection_1').find({conversation:""}),但是我不知道如何将其应用于字典字段列表(例如我的案例)。有什么帮助吗?

米克尔

您需要$ objectToArray运算符才能将具有未知键的对象转换为kandv字段的数组然后在$ expr内部,您可以在该数组上应用$ filter来检查是否message等于"Message 4"

db.collection.aggregate([
    {
        $match: {
            $expr: {
                $ne: [
                    {
                        $size: {
                            $filter: {
                                input: { $objectToArray: "$conversations" },
                                as: "conv",
                                cond: { $eq: [ "$$conv.v.message", "Message 4" ] }
                            }
                        }
                    },
                    0
                ]
            }
        }
    }
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MongoDB文档中的过滤器数组

使用过滤器和选项在PHP MongoDB中查询文档的数组字段

mongodb嵌套文档的过滤器数组

如何在具有多个组合字段的过滤器的集合中查找文档?

来自子文档数组的mongodb过滤器

MongoDB过滤器集合未包含在另一个集合的array字段中

具有特定字段的 mongodb 过滤器数组

如何在mongodb中的过滤器之后输出/映射仅包含必需字段的数组?

如何在Android上使用whereArrayContains()过滤器查询Firestore集合中包含对象数组的文档?

在MongoDB中使用文档属性过滤器获取嵌入数组的扁平文档数组

如何基于Mongodb的doc字段中的每个数组项过滤集合

过滤查询-检索每个过滤器过滤的文档数

向MongoDB集合中的每个文档添加新字段

按与过滤器匹配的数组的最后一个元素中的值对文档进行排序。Mongodb

C# MongoDB 2. 查找文档比较其字段:不支持的过滤器

如何通过Android Cloud Firestore中的集合过滤器获取文档数

对象数组中的过滤器数组

数组中的过滤器数组

通过传递过滤器数组来更新查询来更新多个文档中的数组

如何聚合过滤器嵌套文档并从其他字段中获取值

使用C#针对Mongodb的数组字段创建In过滤器

如何在 MongoDB 中使用数组嵌套过滤器获取特定字段值?

$eq 内部过滤器不适用于数组字段 - Mongodb

mongoDB中的多个过滤器

如何使用 Java 只从匹配特定过滤器的 MongoDB 文档中获取

如何从 C# 计算 mongodb 中带有过滤器的文档

在MongoDB,过滤器,C#中返回具有所需值的文档

Python中的数组过滤器?

数组中的Javascript过滤器值