比较文档字段

时间:2013-12-05 15:09:23

标签: mongodb search nosql

假设我有这个文档结构:

{
    "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个文档。

2 个答案:

答案 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”的结构。我想不出用不同的数据模型来做这个的方法。我实际上怀疑在任何查询语言中都有类似的东西,或者在那里?

我认为你将继续在你的应用程序中进行匹配。