我们使用Mongo来持久访问访问我们客户网站的用户的会话信息。其中大部分只是会话元数据(原始时间,浏览器,操作系统,国家等等)。
其中一个领域是一个不起眼的网页'阵列。其中包括按用户访问时排序的一系列网站。很简单。然而,现在我们发现自己迫切需要按照它们相对于EACH OTHER在数组中出现的顺序来过滤它们,而不仅仅是它们出现在数组中。
考虑以下页面数组:
[ "A", "B", "C", "D", "E", "F", "G", "H" ]
MongoDB中有没有办法查询说:"从db.sessions.pages中检索每个文件,其中B直接跟随C,D直接或间接跟随G AND整个序列以H结尾?
重申 - 此示例也应传递上述查询:
[ "D", "A", "B", "A", "B", "C", "H" ]
考虑到每个客户我们有成千上万的文件......我们希望以任何方式实现这种效果吗?我明白,如果是 - 它可能需要某种形式的聚合。或者我们只是通过选择Mongo来完全射击自己?
答案 0 :(得分:0)
这是一项复杂的任务,即使在SQL中使用CTE
时,它看起来并不容易。
imho这可以通过自定义js
完成var requiredSequence = [a, b]
var requiredElement = 'g'
db.collection.find({}).forEach(function (doc) {
var arrayLenght = doc.array.lenght;
for (var i = 0; i < arrayLenght - 1; i++) {
if (doc.array[i] === requiredSequence[0] && doc.array[i + 1] === requiredSequence[1]) {
if (doc.array.indexOf(requiredElement) > -1) {
// we have all criteria meet
printjson(doc);
break;
}
})
}
})