我在NodeJS中组合UnderscoreJS和MongooseJS时遇到问题。我有mongoose的结果,我想过滤一个数组
var __ = require("underscore"),
platformInfo = __.findWhere(user.platforms, {"pId": platformId});
但是user.platforms中的pId是一个ObjectId,无法找到。 但是,如果我制作一个并且比较这样就可以了:
__.each(user.platforms, function(platform){
if(platform.pId.toString() == platformId){
}
});
我如何在findWhere方法(一行,酷)中找到相同的结果?感谢
答案 0 :(得分:6)
遗憾的是,mongodb ObjectId实例无法与JavaScript的相等运算符==
或===
一起正常运行。您需要使用提供的方法:objectId1.equals(objectId2)
或确保它们都转换为字符串然后下划线或===
将起作用。
platformInfo = _.filter(user.platforms, function (platform) {
return platform.pId.toString() === platformId;
})
答案 1 :(得分: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})
,它应该会给您第一场比赛。
答案 2 :(得分:0)
如前所述,mongodb ObjectId实例无法与JavaScript的相等运算符一起正常工作。 但是,对于这个问题还有另一个更简单的解决方案:您可以获取MongoDB结果对象并通过JSON.stringify()将其转换为字符串:
var myString = JSON.stringify(MONGODB_RESULT);
之后,您可以通过JSON.parse()将该字符串转换回对象:
var myObject = JSON.parse(myString);
您现在可以对该对象执行任何Lodash / Underscore操作。
希望有所帮助!
答案 3 :(得分:0)
您可以在mongo响应对象的id之后使用.toString 对于前
valorParcela:number;
totalCost:number;
VendaProdutoVendaNParcelas: number;
this.valorParcela = Number( this.totalCost / this.VendaProdutoVendaNParcelas).toFixed(2);