我无法比较mongoose ObjectId或它们的String值。
我有两个数组,第一个是:
a = [
"50dfb24123c43a501400000e",
"50d1bda330eb531c1400000d",
"50d1bdcf30eb531c1400000f",
"50d1beac30eb531c14000012",
"50dfb26223c43a501400000f"
]
,第二个是:
b = [
"50dfb26223c43a501400000f"
]
正在运行_.intersection(a,b)
会为我提供一个空数组[]
,而不是b
中的值。
a和b的值是由Mongoose模型返回的结果_.pluck
编辑的。
我已经尝试将每个数组值转换为字符串,但我仍然得到相同的空数组结果。
我搜索了类似的问题,但我发现的解决方案没有帮助(即转换为字符串)。
我有什么遗失的吗?我知道问题是Mongoose ObjectIds,因为如果我将上面粘贴的原始数组相交,我会得到正确的结果。
由于
答案 0 :(得分:5)
在lodash4中,您现在可以执行此操作:
_.intersectionWith(a, b, _.isEqual)
答案 1 :(得分:1)
在这种情况下,您不能将_.intersection
与ObjectId
的数组一起使用,因为intersection
使用简单的引用相等来比较元素,而不是比较它们的内容。要比较两个ObjectId
的相等性,您需要使用ObjectId.equals
方法。
所以最简单的解决方案是将数组转换为字符串,以便intersection
可以工作。我知道你说你试过了,但你可能在某个地方有一个错误,因为它确实有效。
答案 2 :(得分:1)
您可以使用_.isEqual(object,other)来测试2个mongoose ObjectID是否具有相同的内容。
例如,
var ret=[];
_.each(b,function(x){
ret.push(_.filter(a,function(y){
return _.isEqual(x,y);
}))
})
现在,你应该把ret包含“50dfb26223c43a501400000f”作为Mongoose的ObjectId的数据类型。