Nodejs的Mongo结果与复制结果不一样
我有一个MongoDB的问题。 当我做出这样的事情时:
User.find({}, (err, result) => { })
我得到像这样的东西:
[{ _id: someId name: someName surname: someSurname }]
当我将它复制到剪贴板并粘贴到任何variables,如:
let a = [{ "_id": "someId" "name": "someName" "surname": "someSurname" }]
我检查是否( a === result
),我得到错误,它不一样。 我的问题是为什么,以及如何解决它,因为我需要改变“ result
”,像“ a
”
按照Mukesh Sharma的回答,你没有正确地使用相同的操作符。
当使用===
,你testing对象是否指向相同的引用(这肯定不是这种情况)。
你似乎想要testing两个数组(也是具有特殊属性的对象)是否相等。 在这种情况下,使用简单的相等将永远不会工作。 您必须遍历数组中的所有对象,然后对每个对象迭代所有键,并检查它们是否与另一个数组的对应方相似。
你可以参考这个答案来检查你如何比较两个对象。 最终的结果应该是这样的:
// assuming you use ES6 let array1 = [{ a: 1, b: 2 }]; let array2 = [{ a: 1, b: 2 }]; // check if the arrays have different length if (array1.length !== array2.length) { // definitely not equal return false; }} let n = array1.length; for (let i = 0; i < n; i++) { let res = deepObjCmp(array1[i], array2[i]); if (!res) { // at least one object is different return false; } }
比较两个对象的方法是将它们转换为JSON并检查结果string是否相等
function jsonEqual(a,b) { return JSON.stringify(a) === JSON.stringify(b); } jsonEqual(user1, user2) // true in all cases
从这个链接采取的样本http://www.mattzeunert.com/2016/01/28/javascript-deep-equal.html只要引用它,你会明白。
如果您只想比较_id
, name
和surname
属性,则可以手动检查每个属性。 这种方法可能是您的需求最有效的方式。
function isEqual(documentOne, documentTwo) { return (documentOne._id.toString() === documentTwo._id.toString() && documentOne.name === documentTwo.name && documentOne.surname === documentTwo.surname); } isEqual(a[0], result[0]);