我有类似这样的文档:
{_id: 1, values : [2,3,4] }
{_id: 2, values: [4] }
{_id: 3, values : [3,4,5,6,7,8,9,10,11] }
每个文档都有一个数组。我需要一个查询,只有在其数组的每个元素与所需条件匹配时才返回文档(而不是任何元素匹配时)。
例如。类似于以下内容(但并非如此)
{ 'values' : { '$gt' : 1, '$lt': 5} }
如果第一个和第二个文档都会成功返回,但不会返回第三个文档,因为第三个文档的数组“values”的所有元素都不符合条件。
显然,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上提出了这个问题,但由于对$all运算符不熟悉而引起混乱。在这里,我关心的是文档数组,而不是查询数组。此外,在这种数字情况下,我意识到可能会编写否定所需范围的查询,但通常我将无法编写否定。
{_id: 1, values : [2,3,4] }
{_id: 2, values: [4] }
{_id: 3, values : [3,4,5,6,7,8,9,10,11] }
每个文档都有一个数组。我需要一个查询,只有在其数组的每个元素与所需条件匹配时才返回文档(而不是任何元素匹配时)。
例如。类似于以下内容(但并非如此)
{ 'values' : { '$gt' : 1, '$lt': 5} }
如果第一个和第二个文档都会成功返回,但不会返回第三个文档,因为第三个文档的数组“values”的所有元素都不符合条件。
显然,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上提出了这个问题,但由于对$all运算符不熟悉而引起混乱。在这里,我关心的是文档数组,而不是查询数组。此外,在这种数字情况下,我意识到可能会编写否定所需范围的查询,但通常我将无法编写否定。