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
方法