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只要引用它,你会明白&#x3002;

如果您只想比较_idnamesurname属性,则可以手动检查每个属性。 这种方法可能是您的需求最有效的方式。

 function isEqual(documentOne, documentTwo) { return (documentOne._id.toString() === documentTwo._id.toString() && documentOne.name === documentTwo.name && documentOne.surname === documentTwo.surname); } isEqual(a[0], result[0]);