2014-03-18 42 views
0

當我切換到subdoc相等測試時,我想確保所有文檔的subdocs字段順序都是我將要測試的規範順序。我無法弄清楚檢查這個問題的好方法。Mongodb:查找字段處於非規範化次序的子文檔

也就是說,考慮到這些記錄:

{'_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}查詢我會找不到文檔W的「錯誤」訂單/鍵。我想編寫一次性查詢來查找所有這些文檔,但即使使用$where我也沒有看到如何檢查鍵的順序(我猜如果需要的話,可以嘗試使用規範順序查詢的位置)。

+0

這裏的結構看起來有點模棱兩可。您是指您的'doc'屬性下的單個子文檔還是多個子文檔?無論如何,這裏的子文件結構是真正的問題。在對集合執行JavaScript之前,您應該考慮重新建模。 –

回答

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個子字段,但是這就是模式。