Nodejs Mongo结果与复制结果不同

时间:2017-09-05 06:47:22

标签: javascript json node.js

我遇到了MongoDB的问题。当我做出类似的事情时:

User.find({}, (err, result) => { })

我得到类似的东西:

[{
_id: someId
name: someName
surname: someSurname
}]

当我将其复制到剪贴板并粘贴到任何变量时:

let a = [{
"_id": "someId"
"name": "someName"
"surname": "someSurname"
}]

我检查是否(a === result),我得到了错误而且不一样。我的问题是为什么,以及如何解决它,因为我需要改变" result"类似于" a"

3 个答案:

答案 0 :(得分:0)

根据Mukesh Sharma的回应,你没有正确使用同等操作员。

使用===时,测试对象本身是否指向相同的引用(绝对不是这种情况)。

您似乎想测试两个数组(也是具有特殊属性的对象)是否相等。在这种情况下,使用简单的相等将永远不会起作用。您必须迭代数组中的所有对象,然后,对于每个对象,遍历所有键并检查它们是否与另一个数组的对应项相似。

您可以参考this回答来检查如何比较两个对象。最终结果应如下所示:

// 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;
    }
}

答案 1 :(得分:0)

比较两个对象的方法是将它们转换为JSON并检查结果字符串是否相等

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只需参考您将理解的内容。

答案 2 :(得分:0)

如果您只想比较_idname&amp; 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]);