查找在数组中包含特定值但不是最后一个元素的文档

发出者

我当前的方法是:

var v = 'Value';
Collection.find({arrayToLookIn: v}).forEach(function(obj) {
  if (obj.arrayToLookIn.indexOf(v) !== obj.arrayToLookIn.length - 1) {
    // do stuff
  }
}

我想知道是否有一种方法可以在find()调用中指定这样的规则,而无需进行内部检查?

我浏览了https://docs.mongodb.org/manual/tutorial/query-documents/#match-an-array-element,但没有发现我所寻找的东西。

第一个问题,请保持温柔:)

布雷克七世

您现在可以做什么

您需要$where,可以使用JavaScript评估来匹配文档。因此,您在这里要求评估代码测试每个数组元素,而不是最后一个:

Collection.find({
    "arrayToLookIn": v,
    "$where": function() {
        var array = this.arrayToLookIn;
        array.pop();                    // remove last element
        return array.some(function(el) { return el == 'Value' });
    }
})

请注意,由于它是JavaScript发送到服务器的,因此需要在该代码中指定“值”,而不是使用变量。您可以选择将JavaScript代码构造为“字符串”,以将该变量作为文字加入其中,并将其作为参数提交给$where

请注意,我将保留基本的等式匹配项,因为$where使用这样的索引无法进行匹配,因此它的工作是“过滤”出匹配项在最后一个元素上的结果,而不是测试每个文档来查找是否甚至还在那里。


更好的未来之路

令人好奇的是,截至当前的MongoDB 3.0版本系列,还没有一种真正有效的方法来使用聚合框架,因此JavaScript评估是更好的选择。

您现在需要做一些愚蠢的事情,例如在$groupafter之后找到最后一个元素$unwind,然后再$match逐个列出值$unwind如果值存在多次,效率不高且容易出错。

将来的发行版中将有一个$slice运算符,可以将其与一起使用$redact

Collection.aggregate([
    // Still wise to do this as mentioned earlier
    { "$match": { "arrayToLookIn": v } },

    // Then only return if the match was not in the last element
    { "$redact": {
        "$cond": {
            "if": {
                "$setIsSubset": [
                    [v],
                    { "$slice": [
                        "$arrayToLookIn",
                        0,
                        { "$subtract": [ { "$size": "$arrayToLookIn" }, 1 ] }
                    ]}
                ]
            },
            "then": "$$KEEP",
            "else": "$$PRUNE"
        }
    }}

在哪里$setIsSubset做这已经通过删除它的最后一个数据阵列的比较$slice仅返回从元素0$size零下1

并且$where,当下一个具有$slice聚合功能的版本可用时,它应该比使用本机编码操作进行比较更为有效

更不用说$unwind还可以选择在以后的版本中包括索引位置。但是即使添加了它,也不是一个很好的选择。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

最后一个元素不包含在数组中的映射变量中

来自分类Dev

使用Mongoose查找具有不同值的文档数组中的最后一个文档

来自分类Dev

在数组中查找最后一个非空值的最佳方法是什么

来自分类Dev

在数组中查找与Swift中的特定条件匹配的第一个元素

来自分类Dev

如何在 MongoDB 中查找包含一个或多个搜索数组元素的文档?

来自分类Dev

从特定索引中查找数组中的最后一个元素

来自分类Dev

Mongodb:按数组最后一个元素中的值对文档进行排序

来自分类Dev

EXCEL查找数组中的最后一个相对最大值(公式,不是VBA)

来自分类Dev

在数组的数组中查找第一个元素,第二个元素的值最高

来自分类Dev

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

来自分类Dev

如何使用jQuery从数组对象中查找最新或最后一个元素值

来自分类Dev

使用字符串连接在c中打印数组,但不包含最后一个元素

来自分类Dev

在numpy数组中查找最后一个值

来自分类Dev

Python-查找元素,如果前一个在xpath中包含特定类型的值

来自分类Dev

如何在数据框列中查找第一个和最后一个元素并修剪这些元素之间的值

来自分类Dev

MongoDB查询包含至少一个在数组中指定的值之一的文档

来自分类Dev

查找列中的最后一个值(而不是最后一行)

来自分类Dev

MongoDB:在文档中查找一个元素,该元素包含一个带有数组的子对象的对象

来自分类Dev

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

来自分类Dev

在Mongoose中,如何找到与给定查询值匹配的数组字段的最后一个元素的所有文档?

来自分类Dev

在包含值的字符串数组中查找字符串的最后一个索引

来自分类Dev

在数组中添加属性。添加所有数组中的最后一个值

来自分类Dev

MongoDB按对象ID在数组中查找一个文档

来自分类Dev

在行数组中查找最后一列的最后一个值

来自分类Dev

根据mongo db php中嵌入文档的最后一个元素的字段查找

来自分类Dev

在数据框的列表中查找最后一个值

来自分类Dev

如何测试某个特定元素在数组中另一个特定元素之前?

来自分类Dev

获取对象的一个元素,该元素不包含在数组中

来自分类Javascript

从包含特定值的数组中获取一个对象

Related 相关文章

  1. 1

    最后一个元素不包含在数组中的映射变量中

  2. 2

    使用Mongoose查找具有不同值的文档数组中的最后一个文档

  3. 3

    在数组中查找最后一个非空值的最佳方法是什么

  4. 4

    在数组中查找与Swift中的特定条件匹配的第一个元素

  5. 5

    如何在 MongoDB 中查找包含一个或多个搜索数组元素的文档?

  6. 6

    从特定索引中查找数组中的最后一个元素

  7. 7

    Mongodb:按数组最后一个元素中的值对文档进行排序

  8. 8

    EXCEL查找数组中的最后一个相对最大值(公式,不是VBA)

  9. 9

    在数组的数组中查找第一个元素,第二个元素的值最高

  10. 10

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

  11. 11

    如何使用jQuery从数组对象中查找最新或最后一个元素值

  12. 12

    使用字符串连接在c中打印数组,但不包含最后一个元素

  13. 13

    在numpy数组中查找最后一个值

  14. 14

    Python-查找元素,如果前一个在xpath中包含特定类型的值

  15. 15

    如何在数据框列中查找第一个和最后一个元素并修剪这些元素之间的值

  16. 16

    MongoDB查询包含至少一个在数组中指定的值之一的文档

  17. 17

    查找列中的最后一个值(而不是最后一行)

  18. 18

    MongoDB:在文档中查找一个元素,该元素包含一个带有数组的子对象的对象

  19. 19

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

  20. 20

    在Mongoose中,如何找到与给定查询值匹配的数组字段的最后一个元素的所有文档?

  21. 21

    在包含值的字符串数组中查找字符串的最后一个索引

  22. 22

    在数组中添加属性。添加所有数组中的最后一个值

  23. 23

    MongoDB按对象ID在数组中查找一个文档

  24. 24

    在行数组中查找最后一列的最后一个值

  25. 25

    根据mongo db php中嵌入文档的最后一个元素的字段查找

  26. 26

    在数据框的列表中查找最后一个值

  27. 27

    如何测试某个特定元素在数组中另一个特定元素之前?

  28. 28

    获取对象的一个元素,该元素不包含在数组中

  29. 29

    从包含特定值的数组中获取一个对象

热门标签

归档