mongodb - nin&阵列上的正则表达式

时间:2015-12-18 22:10:35

标签: javascript mongodb

我有2个收藏集,并且我试图从Coll_A获取Field1中某个字段(Coll_B)不存在的所有记录。

我遇到的问题是Field1中的Coll_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来忽略空格,但我不确定如何在这里使用它。任何帮助将非常感谢。感谢。

2 个答案:

答案 0 :(得分:0)

我建议修复集合中不一致的数据。通过修剪场地周围的空白区域来更新所有记录。

如果由于某种原因您无法或不想这样做,那么您可以使用forEach并手动进行检查

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

答案 1 :(得分:0)

您可以简单地将返回值修改为array regular 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$in运营商中使用$nin运营商。