0

当我切换到 subdoc 相等性测试时,我想确保我所有文档的 subdocs 字段顺序都符合我将要测试的规范顺序。我想不出一个很好的查询来检查这个。

也就是说,鉴于这些记录:

{'_id': .., 'doc':{'a': 1, 'b': 2}, ..}
{'_id': .., 'doc':{'a': 11, 'b': 21}, ..}
{'_id': .., 'doc':{'a': 0, 'b': 2}, ..}
...
{'_id': .., 'doc':{'b': 0, 'a': 4}, ..}

如果我用'doc' : {'a': 4, 'b': 0}“错误”顺序查询,我将找不到带有键的文档。我想写一个一次性查询来查找所有这些文档,但即使$where我看不到如何检查键的顺序(我猜如果需要的话,哪里可以尝试使用规范顺序查询) .

4

1 回答 1

1

所以,我写了一个$where可以做到的。我不确定这是最好的解决方案:

db.mycollection.find({$where: function() { 
    var keys = Object.keys(this['doc']); 
    var ref = ['a', 'b']; 
    for (var i=0; i < ref.length; i++) { 
        if (keys[i] != ref[i]) return true; 
    } 
    return false; 
    }}, 
    {_id: 1})

显然,如果我的文档真的只有 2 个子字段,那就太矫枉过正了,但这就是模式。

于 2014-03-18T20:43:48.080 回答