3

我在 NodeJS 中结合 UnderscoreJS 和 MongooseJS 时遇到问题。我有猫鼬的结果,我想过滤一个数组

var __ = require("underscore"),
    platformInfo = __.findWhere(user.platforms, {"pId": platformId});

但是 user.platforms 中的 pId 是 ObjectId 并且找不到。但是,如果我每个都做一个并像这样比较就可以了:

__.each(user.platforms, function(platform){

                if(platform.pId.toString() == platformId){

                }

});

我如何在 findWhere 方法(一行,很酷)中找到相同的结果?谢谢

4

4 回答 4

7

遗憾的是 mongodb ObjectId 实例不能与 JavaScript 的相等运算符=====. 您要么需要使用提供的方法:objectId1.equals(objectId2)要么确保它们都转换为字符串然后下划线或===将工作。

platformInfo = _.filter(user.platforms, function (platform) {
  return platform.pId.toString() === platformId;
})
于 2013-09-09T15:36:35.393 回答
0

您可以在 mongo 响应对象的 id 之后使用 .toString For ex

_.findWhere(allMappingData, {_categoryId: catObj._id.toString() ,_contentId: content.contentId.toString()}));

于 2019-05-31T11:13:59.257 回答
0

如前所述,mongodb ObjectId 实例不能与 JavaScript 的相等运算符一起正常工作。但是,对于这个问题还有另一个更简单的解决方案:您可以获取 MongoDB 结果对象并通过 JSON.stringify() 将其转换为字符串:

    var myString = JSON.stringify(MONGODB_RESULT);

之后,您可以通过 JSON.parse() 将该字符串转换回对象:

    var myObject = JSON.parse(myString);

您现在可以对该对象执行任何 Lodash/Underscore 操作。

希望有帮助!

于 2017-07-12T14:29:34.927 回答
0

我尝试使用 underscore.js 为该问题编写一个通用函数:

function findWhereObjectId(objs, comp) {
    return _.find(objs, function(obj) {
        return _.some(_.keys(obj), function(key) {
            return (key == _.keys(comp)[0] && obj[key].equals(comp[key]));
        });
    });
};

你现在可以跟注findWhereObjectId(user.platforms, {"pId": platformId}),它应该给你第一场比赛。

于 2017-06-13T22:58:01.477 回答