当我切换到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
,我也看不出如何检查密钥的顺序(我想在哪里可以尝试查询规范如果需要,请订购。)
答案 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个子字段,那就太过分了,但这就是模式。