gpt4 book ai didi

arrays - mongodb查询将doc数组中的每个元素与条件匹配

转载 作者:IT老高 更新时间:2023-10-28 13:32:11 26 4
gpt4 key购买 nike

我有类似的文档:

{_id: 1, 值: [2,3,4] }

{_id:2,值:[4] }

{_id: 3, 值: [3,4,5,6,7,8,9,10,11] }

其中每个文档都有一个数组。我需要一个仅在其数组的每个元素都匹配所需条件(而不是任何元素匹配)时才返回文档的查询。

例如。类似(但不是)

{ '值' : { '$gt' : 1, '$lt': 5} })

这将成功返回前两个但不是第三个文档,因为不是全部第三个文档的数组“值”的元素与条件匹配。

显然 mongodb 在数组查询中使用隐​​式 OR,而我需要 AND。

我想我可以手动索引每个元素,例如:

collection.find({values.0: {$gt:1,$lt:5}, values.1:{$gt:1,$lt:5}, ... values.n:{$gt :1,$lt:5}}) 但这对我的高度动态数组来说很痛苦。

有没有更好的办法?

注意:我在 mongodb-user 上问过这个问题,但刚接触 mongodb 时会与 $all 运算符混淆。这里我关心的是 doc 数组,而不是查询数组。此外,在这种数字情况下,我意识到可能会编写一个否定所需范围的查询,但通常我无法编写否定。

最佳答案

我认为除了手动遍历文档并检查数组中的每个值之外,还没有任何方法可以做到这一点。这会很慢,因为它必须在每个文档上执行 JavaScript,并且不能利用 col.values 上的任何索引。

即使是 $where JavaScript 表达式查询在这里似乎不起作用,可能是因为查询包含回调并且过于复杂:

db.col.find("this.values.every(function(v) { return (v > 1 && v < 5) })")

编辑:对于一些查询,包括这个,JavaScript $where表达式需要一个 return 语句,所以这很好用:

db.col.find("return this.values.every(function(v) { return (v > 1 && v < 5) })")

关于arrays - mongodb查询将doc数组中的每个元素与条件匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6038818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com