如何将 Mongoose 对象与 JSON 对象进行比较?
Posted
技术标签:
【中文标题】如何将 Mongoose 对象与 JSON 对象进行比较?【英文标题】:How to compare a Mongoose object to a JSON object? 【发布时间】:2015-07-17 16:16:45 【问题描述】:这是我的问题。
一方面,我有一个 Mongoose 对象的普通对象表示。
另一方面,我有一个 Mongoose 对象直接来自数据库中的 findOne
。
我要做的是检查两个对象的两个属性之间是否有任何不同。 让我们以这种模型为例:
_id: 'abc',
id: 'abc',
things: [
_id: 'def',
id: 'def',
other_things: [
_id: 'ghi',
id: 'ghi',
foo: 'bar'
]
]
我想比较 myplainobject.things
和 mydbobject.things
。
但是,使用underscore
,_.isEqual(myplainobject.things, mydbobject.things)
总是失败。
这是由于第一种情况下为string
和另一种情况下为ObjectID
的ID。
虽然有很多方法可以将ObjectID
与string
进行比较,但有没有一种优雅 的方法来比较对象?
还是我必须实现自己的解决方案,循环遍历每个子文档并手动比较属性?
【问题讨论】:
尝试在查询中使用精益:***.com/questions/9952649/… 这不是一个选项,我需要save
方法
【参考方案1】:
由于此时我没有足够的声誉来为 drinchev 的答案添加评论,因此我将在此处添加。首先,使用 drinchev 建议的toObject()
方法,然后您可以使用类似于https://***.com/a/14368628/3365039 的答案(稍作修改)来确保键的顺序相同。
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)
【讨论】:
以上是关于如何将 Mongoose 对象与 JSON 对象进行比较?的主要内容,如果未能解决你的问题,请参考以下文章
Node.js / Express / Mongoose - 如何发送 JSON 以及对象视图?