Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将Mongoose对象与JSON对象进行比较?_Javascript_Json_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 如何将Mongoose对象与JSON对象进行比较?

Javascript 如何将Mongoose对象与JSON对象进行比较?,javascript,json,node.js,mongodb,mongoose,Javascript,Json,Node.js,Mongodb,Mongoose,这是我的问题 一方面,我有一个猫鼬对象的简单对象表示 在另一边,我有一个猫鼬对象直接来自数据库中的findOne 我要做的是检查两个对象的两个属性之间是否存在差异。 让我们考虑这样的模型,例如: { _id: 'abc', id: 'abc', things: [{ _id: 'def', id: 'def', other_things: [{ _id: 'ghi', id: 'ghi', fo

这是我的问题

一方面,我有一个猫鼬对象的简单对象表示

在另一边,我有一个猫鼬对象直接来自数据库中的
findOne

我要做的是检查两个对象的两个属性之间是否存在差异。 让我们考虑这样的模型,例如:

{
   _id: 'abc',
   id: 'abc',
   things: [{
      _id: 'def',
      id: 'def',
      other_things: [{
        _id: 'ghi',
        id: 'ghi',
        foo: 'bar'
      }]
   }]
}
我想比较
myplainobject.things
mydbobject.things

但是,使用
下划线
的.isEqual(myplainobject.things,mydbobject.things)
总是失败

这是由于在第一种情况下的ID是
string
,而在另一种情况下的ID是
ObjectID

虽然有很多方法可以将
ObjectID
string
进行比较,但是否有一种优雅的方法可以比较对象?
或者我必须实现我自己的解决方案,循环遍历每个子文档并手动比较属性吗?

由于我目前没有足够的声誉在drinchev的答案中添加注释,因此我将在此处添加注释。首先,使用drinchev建议的
toObject()
方法,然后可以使用类似于(稍微修改)的答案来确保键的顺序相同

function compareKeys(a, b) {
    var aKeys = Object.keys(a).sort();
    var bKeys = Object.keys(b).sort();

    // Check that the objects contain the same keys.
    if (JSON.stringify(aKeys) !== JSON.stringify(bKeys)) {
        return false
    }

    // Check that the keys in each object contain the same values.
    for (const key in aKeys) {
        if (a[key] !== b[key]) {
            return false
        }
    }

    return true
}

compareKeys(mongooseModel.toObject(), jsObject)

尝试使用精益查询:这不是一个选项,我需要
save
方法