Mongodb:查找其字段为非规范顺序的子文档

时间:2014-03-18 19:57:37

标签: mongodb key subdocument

当我切换到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}查询,我将无法以“错误”的顺序找到doc w / keys。我想编写一次性查询来查找所有这些文档,但即使使用$where,我也看不出如何检查密钥的顺序(我想在哪里可以尝试查询规范如果需要,请订购。)

1 个答案:

答案 0 :(得分: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个子字段,那就太过分了,但这就是模式。