【问题标题】:filter mongodb object result by ObjectId with Underscore使用下划线按 ObjectId 过滤 mongodb 对象结果
【发布时间】:2019-05-31 19:13:59
【问题描述】:

我在 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 方法(一行,很酷)中找到相同的结果?谢谢

【问题讨论】:

    标签: javascript node.js mongodb mongoose underscore.js


    【解决方案1】:

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

    platformInfo = _.filter(user.platforms, function (platform) {
      return platform.pId.toString() === platformId;
    })
    

    【讨论】:

      【解决方案2】:

      我尝试使用 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}),它应该会为您提供第一场比赛。

      【讨论】:

        【解决方案3】:

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

            var myString = JSON.stringify(MONGODB_RESULT);
        

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

            var myObject = JSON.parse(myString);
        

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

        希望有帮助!

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-01-06
            • 1970-01-01
            • 1970-01-01
            • 2013-09-12
            • 1970-01-01
            • 1970-01-01
            • 2020-04-28
            • 2021-02-15
            相关资源
            最近更新 更多