假设我有这个文档结构:
{
"user": "John Doe",
"data": [1, 3, 2, 4, 1, 3],
"data_version": 1
}
我是否可以通过data
字段进行查询,以便匹配阵列中位于同一位置的至少N
值的所有文档?
例如,在那些data
字段中:
1, 3, 4, 2, 5, 1, 5
2, 5, 1, 4, 2, 3, 5
1, 3, 2, 5, 5, 4, 2
5, 2, 4, 1, 2, 2, 3
搜索
1, 3, 3, 1, 5, 4, 3
N
最低限制为3,我会得到第1和第3个文档,但是将N
提升到4,我只会获得第3个文档。
答案 0 :(得分:1)
您需要迭代您的收藏。类似于以下内容应该有效:
var N = 3;
var query = [1,3,3,1,5,4,3];
db.users.find().forEach(function(entry) {
var similarity = 0;
for (i = 0; i < entry.data.length; i++) {
if (entry.data[i] === query[i]) { similarity++; }
}
if (similarity > N) { print(entry); }
});
这有帮助吗?
答案 1 :(得分:0)
我认为你不能在查询语言中做到这一点,没有“匹配N out of M”的结构。我想不出用不同的数据模型来做这个的方法。我实际上怀疑在任何查询语言中都有类似的东西,或者在那里?
我认为你将继续在你的应用程序中进行匹配。