1

我在比较 mongoose ObjectId 或它们的 String 值时遇到问题。

我有两个数组,第一个是:

a = [
"50dfb24123c43a501400000e",
"50d1bda330eb531c1400000d",
"50d1bdcf30eb531c1400000f",
"50d1beac30eb531c14000012",
"50dfb26223c43a501400000f"
]

第二个是:

b = [
"50dfb26223c43a501400000f"
]

running_.intersection(a,b)给了我一个空数组[],而不是b.

a 和 b 的值_.pluck来自 Mongoose 模型返回的结果。我尝试将每个数组值转换为字符串,但我仍然得到空数组的相同结果。

我搜索了类似的问题,但我发现的解决方案没有帮助(即转换为字符串)。

有什么我想念的吗?我知道问题出在 Mongoose ObjectIds 上,因为如果我与上面粘贴的原始数组相交,我会得到正确的结果。

谢谢

4

3 回答 3

6

在 lodash4 中,您现在可以这样做:

_.intersectionWith(a, b, _.isEqual)
于 2016-03-04T16:35:30.830 回答
1

在这种情况下,您不能使用_.intersectionwith 数组,ObjectId因为intersection使用简单的引用相等来比较元素,而不是比较它们的内容。要比较两个ObjectIds 是否相等,您需要使用该ObjectId.equals方法。

所以最简单的解决方案是将数组转换为字符串,这样intersection就可以了。我知道你说过你试过了,但你可能在某个地方有一个错误,因为它确实有效。

于 2013-01-05T16:42:33.563 回答
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 的数据类型。

于 2013-09-05T06:22:28.620 回答