2015-12-18 206 views
1

我有2個系列,我試圖從Coll_A獲取所有記錄,其中某個字段(Field1)不存在於Coll_B中。mongodb - 正則表達式和陣列上的正則表達式

我遇到的問題是,這個Field1Coll_A,其中包含一個字符串值,結尾填充空白到一定的長度,但此填充是在其他集合中不存在。

所以,對於下面的查詢中,vals陣列具有未填充的記錄,所以當我用db.Coll_A.find,它返回不正確的結果。

vals = db.Coll_B.find({}, 
         {"Field1" : 1, _id: 0}) 
       .map(function(a){ 
         return a.Field1; 
        }); 
db.Coll_A.find({ "Field1": { $nin: vals }}); 

我該如何解決這個問題?我使用regex查找忽略空格,但我不確定這是如何使用的。任何援助將非常感激。謝謝。

回答

0

你可以簡單地修改返回值的arrayregular expressions並在您的$nin運營商中使用它。

代碼:

var exp = db.Coll_B.find({}, {"Field1" : 1, _id: 0}).map(function(a){ 
           return new RegExp(a.Field1+"\\s*$"); 
          }); 
db.coll_A.find({"Field1":{$nin:exp}}); 

不能使用$regex運營商$nin$in運營商內部。

+0

謝謝!我不知道我可以修改返回到一個正則表達式數組。這對我來說非常合適。 – user3723491

0

我會建議修復集合中不一致的數據。用修整場地周圍的空白來更新所有記錄。

如果由於某種原因,你不能或不想這樣做,那麼你可以使用forEach和手工做檢查

var results = []; 
db.Coll_A.find({}).forEach(function(row){ 
    if(row.Field1.trim().indexOf(vals) === -1){ 
    results.push(row); 
    } 
}); 
+0

謝謝。我結束了使用下面的建議,但很高興有這樣的選項供將來使用, – user3723491