2017-09-05 39 views
2

我遇到了MongoDB的問題。當我做類似:Nodejs Mongo的結果與複製的結果不一樣

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

我得到的是這樣的:

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

當我把它複製到剪貼板,然後粘貼到像任何變量:

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

我檢查( a === result),我弄錯了,它不一樣。我的問題是爲什麼,以及如何解決它,因爲我需要改變「result」到像「a

+2

你比較json對象的方式是不正確的。檢查這個https://stackoverflow.com/questions/4465244/compare-2-json-objects –

+0

@MukeshSharma我必須複製它的地方或什麼? –

+0

你應該考慮到'a._id'是一個字符串,而'result [0] ._ id'是一個_ObjectId_ – kiro112

回答

0

根據穆克什夏爾馬的迴應,你沒有正確使用相等的運算符。

使用===時,測試對象本身是否指向相同的引用(這絕對不是這種情況)。

您似乎想要測試兩個數組(也是具有特殊屬性的對象)是否相等。在這種情況下,使用簡單的等式將永遠不會工作。您必須遍歷數組中的所有對象,然後對每個對象遍歷所有鍵並檢查它們是否與另一個數組的對應方相似。

您可以參考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; 
    } 
} 
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只是參考你會明白的。

0

如果您只想比較_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]);