mongodb查询以查找数组中的对象与另一个数组字段的元素不匹配的位置

维沙尔·沙玛

我收集了如下文件:

{
_id: ObjectId("55b164c65c1a8f360078c917"),
message_id: ["abc","def"],
message: [{message_id: "efgh", message_body: "somebody"}]
}

我想找出mongodb查询来找出那些message.message_id不在message_id中的文档。谁能帮我这个忙。

布雷克七

可能与MongoDB的2.6和更大的用途,最好的办法.aggregate()$redact

db.collection.aggregate([
    { "$redact": {
        "$cond": {
            "if": { 
                "$gt": [
                    { "$size": {
                        "$setIntersection": [
                            { "$map": {
                                "input": "$message",
                                 "as": "msg",
                                 "in": "$$msg.message_id"
                            }},
                            "$message_id" 
                        ]
                    }},
                    0
                ]
            },
            "then": "$$PRUNE",
            "else": "$$KEEP"
        }
    }}
])

逻辑的“由内而外”$map是用来从“ messages”数组中取出“ message_id”的键,然后将其返回以与“ message_id”数组本身进行比较以查看的结果$setIntersection通过这种方式可以看到“交集”,因为这里没有具体的内容说一个是另一个的“子集”。因此,这只是常见的元素,否则存在$setIsSubset

自然,如果该$size交点的大于0,则存在元素匹配。这样该true条件将被“修剪”,而其他任何条件都将被“保留”。

或者在以前的版本中,$where与此JavaScript eval一起使用,遵循完全相同的逻辑:

db.collection.find({
    "$where": function() {
        var self = this;
        return self.message.map(function(el) {
            return el.message_id;
        }).filter(function(el) {
            return self.mesage_id.indexOf(el) != -1
        }).length == 0;
    }
})

在较早的版本中,还可以对聚合管道进行另一种处理,但是这将需要多个管道阶段,因此需要完成数遍操作。因此,这不是MongoDB 2.6之前的最佳选择。

无论如何,标准查询操作通常无法将文档的一个元素与另一个元素进行“比较”。因此,这留下了聚合框架或$where作为可以进行此比较的两个工具。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在另一个数组中查找一个数组的匹配索引

来自分类Dev

如何查找包含元素与另一个数组中的其他元素匹配的数组的文档?

来自分类Dev

如何查询mongo以查找包含来自另一个数组的任何元素的数组?

来自分类Dev

如何从数组中删除与另一个数组中的元素匹配的元素

来自分类Dev

如何使用LINQ to MongoDb在文档中另一个数组内部的数组中查找和推送元素

来自分类Dev

如何遍历对象数组与另一个数组中的公共元素匹配并返回“名称”的键值

来自分类Dev

如果一个数组的元素不在PHP的另一个数组中,如何获取多维度数组中的元素

来自分类Dev

如何在另一个数组中存储数组的对象元素个数?

来自分类Dev

查找数组中的数据,如果它与另一个数组匹配,则删除

来自分类Dev

从一个数组中查找另一个数组中的元素并求和

来自分类Dev

在另一个数组的特定列中查找数组中最接近的元素

来自分类Dev

查找数组中而不是另一个数组中最小元素的索引(Matlab)

来自分类Dev

Google表格公式根据另一个数组中的匹配项查询一个数组

来自分类Dev

在 mongoDB 中的另一个数组中查询整个特定数组

来自分类Dev

在其中一个属性与另一个数组中的项目不匹配的javascript对象数组中查找项目

来自分类Dev

Mongodb根据另一个数组元素过滤一个数组

来自分类Dev

另一个数组中的numpy查找元素索引

来自分类Dev

删除另一个数组中的元素

来自分类Dev

从另一个数组中获取匹配的元素

来自分类Dev

如何查找另一个数组中不可用的ID的对象

来自分类Dev

查询一个字段等于另一个数组字段?

来自分类Dev

Python:在另一个数组(包括重复数组)中查找数组所有元素的索引

来自分类Dev

如何使用mongoose在MongoDB中将元素从一个数组位置移动到另一个数组位置?

来自分类Dev

根据mongodb中另一个数组字段的值将数组字段添加到集合中

来自分类Dev

从js中另一个数组中的数组中查找元素的最佳方法是什么?

来自分类Dev

在另一个数组内的JavaScript对象数组中按属性查找对象

来自分类Dev

Objective-C:遍历对象数组并删除与另一个数组中的值匹配的对象

来自分类Dev

在一个for循环中从一个数组中查找与另一个数组相比缺少的元素

来自分类Dev

查找索引与另一个数组值匹配的数组值

Related 相关文章

  1. 1

    在另一个数组中查找一个数组的匹配索引

  2. 2

    如何查找包含元素与另一个数组中的其他元素匹配的数组的文档?

  3. 3

    如何查询mongo以查找包含来自另一个数组的任何元素的数组?

  4. 4

    如何从数组中删除与另一个数组中的元素匹配的元素

  5. 5

    如何使用LINQ to MongoDb在文档中另一个数组内部的数组中查找和推送元素

  6. 6

    如何遍历对象数组与另一个数组中的公共元素匹配并返回“名称”的键值

  7. 7

    如果一个数组的元素不在PHP的另一个数组中,如何获取多维度数组中的元素

  8. 8

    如何在另一个数组中存储数组的对象元素个数?

  9. 9

    查找数组中的数据,如果它与另一个数组匹配,则删除

  10. 10

    从一个数组中查找另一个数组中的元素并求和

  11. 11

    在另一个数组的特定列中查找数组中最接近的元素

  12. 12

    查找数组中而不是另一个数组中最小元素的索引(Matlab)

  13. 13

    Google表格公式根据另一个数组中的匹配项查询一个数组

  14. 14

    在 mongoDB 中的另一个数组中查询整个特定数组

  15. 15

    在其中一个属性与另一个数组中的项目不匹配的javascript对象数组中查找项目

  16. 16

    Mongodb根据另一个数组元素过滤一个数组

  17. 17

    另一个数组中的numpy查找元素索引

  18. 18

    删除另一个数组中的元素

  19. 19

    从另一个数组中获取匹配的元素

  20. 20

    如何查找另一个数组中不可用的ID的对象

  21. 21

    查询一个字段等于另一个数组字段?

  22. 22

    Python:在另一个数组(包括重复数组)中查找数组所有元素的索引

  23. 23

    如何使用mongoose在MongoDB中将元素从一个数组位置移动到另一个数组位置?

  24. 24

    根据mongodb中另一个数组字段的值将数组字段添加到集合中

  25. 25

    从js中另一个数组中的数组中查找元素的最佳方法是什么?

  26. 26

    在另一个数组内的JavaScript对象数组中按属性查找对象

  27. 27

    Objective-C:遍历对象数组并删除与另一个数组中的值匹配的对象

  28. 28

    在一个for循环中从一个数组中查找与另一个数组相比缺少的元素

  29. 29

    查找索引与另一个数组值匹配的数组值

热门标签

归档