无法将MongoDB数据与javascript数组进行比较

时间:2017-03-03 03:05:09

标签: arrays node.js mongodb

我想将从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' ]

在这种情况下,任何人都可以帮助我吗? 我会很感激的。

1 个答案:

答案 0 :(得分:0)

我也有这个问题,mongodb的结果是一个ObjectId类型,所以你可以将someObjectId.toString()值与你的字符串数组进行比较,或者你可以使用

someObjectId.equals(stringOrObjectIdValue)

但是,如果你想继续使用lodash函数,你必须在将它们传递给函数之前强制将这两个数组转换为字符串或ObjectIds。