我想将从Mongo获得的数据与javascript数组进行比较。我正在使用lodash进行比较。但它总是返回不正确的结果。
var editUser = function(userData, getOutFunction) {
var status = CONSTANTS.NG;
checkExistUser(userData._id).then(function(user) {
if (user !== null) {
var userGroup = JSON.stringify(user.group);
user.group = user.group.map((groupId) => {
return groupId.toString();
});
var removedGroups = _.difference(userGroup, userData.group);
var addedGroups = _.difference(userData.group, userGroup);
console.log('Removed Groups: ', removedGroups);
console.log('Added Groups: ', addedGroups);
} else {
status = CONSTANTS.NG;
logger.debug(DEBUG_CLASS_NAME, "Cannot find object");
if (typeof(getOutFunction) !== 'undefined') {
getOutFunction(status, null);
} else {
NO_CALLBACK();
}
}
}).catch(function() {
console.log('Promise is error');
});
var checkExistUser = function(userId) {
return new Promise(function(resolve, reject) {
UserDAO.findById(userId, function(err, user) {
if (err) {
logger.debug(DEBUG_CLASS_NAME, {
name: err.name,
code: err.code,
message: err.message,
method: "checkExist"
});
resolve(null);
} else {
resolve(user);
}
});
});
}
例如:当我尝试为lodash差异函数输入值时
var user.group = ["58b8da67d585113517fed34e","58b8da6ed585113517fed34f"];
var userData.group = [ '58b8da67d585113517fed34e' ];
我希望lodash差异返回结果:
已移除的群组:['58b8da6ed585113517fed34f']
添加了群组:[]
然而,该功能给了我如下结果:
已移除的群组:[]
添加了群组:[ '58b8da67d585113517fed34e' ]
在这种情况下,任何人都可以帮助我吗? 我会很感激的。
答案 0 :(得分:0)
我也有这个问题,mongodb的结果是一个ObjectId类型,所以你可以将someObjectId.toString()值与你的字符串数组进行比较,或者你可以使用
someObjectId.equals(stringOrObjectIdValue)
但是,如果你想继续使用lodash函数,你必须在将它们传递给函数之前强制将这两个数组转换为字符串或ObjectIds。