我有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忽略空格,但不确定如何在此处使用它。任何帮助将不胜感激。谢谢。

最佳答案

您可以简单地将返回值修改为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运算符。

关于javascript - mongodb-数组上的Nin和正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34364696/

10-12 01:10