我有一个问题,我想知道我是否可以在MongoDB聚合框架或MapReduce级别解决它,而不是在服务器代码中执行它。 问题: 我有以下集合:
[
{
id:...,
pages:[
000,
111,
222,
666,
999....
]
},
{
id:...,
pages:[
111,
666,
999....
]
},
.
.
.
]
我希望能够要求这条路径:111,999并且聚合将返回2的数量,为什么!?因为111和999按此顺序出现在两个文档中,无论它们之间有多少元素。 此外,我希望能够请求000,222,999,这将只返回1(计数),因为此顺序中的这三个数组元素仅出现在一个文档中。
在我的案件中,订单是必须的 如果我有另一个页面文件:[999,666,111],我想找到所有666,999我不希望这个文件成为结果的一部分,因为999,666与666,999不一样
这意味着我无法对数组进行排序,顺序很重要,我希望找到包含给定元素的数组,但按此顺序
我希望我能正确解释我的问题.... 在MongoDB级别中执行此操作的最佳方法是什么,是聚合吗?或者可能是地图减少或者它可能会出现什么?
提前致谢
答案 0 :(得分:0)
The $all operator selects the documents where the value of a field is an array that contains all the specified elements.
https://docs.mongodb.com/master/reference/operator/query/all/
db.Test6.count({pages: {$all: [111, 999]}}); // 2
db.Test6.count({pages: {$all: [000, 222, 999]}}); // 1
Related to the Ordered check, my suggestion is to suppose that the Array is already ordered (this will make the query more easy/fast to do).
In order to have the Array sorted, you should assure that when you push the element: https://docs.mongodb.com/master/reference/operator/update/sort/#up._S_sort