Saya memiliki aplikasi node.js yang menarik beberapa data dan menempelkannya ke objek, seperti ini:
var results = new Object();
User.findOne(query, function(err, u) {
results.userId = u._id;
}
Ketika saya melakukan if / then berdasarkan pada ID yang disimpan itu, perbandingannya tidak pernah benar:
if (results.userId == AnotherMongoDocument._id) {
console.log('This is never true');
}
Ketika saya melakukan console.log dari kedua id itu, keduanya sama persis:
User id: 4fc67871349bb7bf6a000002 AnotherMongoDocument id: 4fc67871349bb7bf6a000002
Saya berasumsi ini adalah semacam masalah tipe data, tapi saya tidak yakin bagaimana mengkonversi hasil. PenggunaId ke tipe data yang akan mengakibatkan perbandingan di atas menjadi benar dan otak saya yang di-outsource (alias Google) tidak dapat membantu.
.equals()
: mongodb.github.io/node-mongodb-native/api-bson-generated/…mongoose
Anda bisa sajarequire('mongoose').mongo.ObjectID
sehingga Anda tidak perlu membuat daftar dependensi tambahanObjectID
s adalah objek jadi jika Anda hanya membandingkannya dengan==
Anda membandingkan referensi mereka. Jika Anda ingin membandingkan nilainya, Anda perlu menggunakanObjectID.equals
metode ini:sumber
mengubah id objek menjadi string (menggunakan metode toString ()) akan melakukan pekerjaan itu.
sumber
Jawaban yang diterima benar-benar membatasi apa yang dapat Anda lakukan dengan kode Anda. Misalnya, Anda tidak akan dapat mencari array
Object Ids
dengan menggunakan metode equals. Sebagai gantinya, akan lebih masuk akal untuk selalu menggunakan string dan membandingkan kunci.Berikut adalah contoh jawaban jika Anda perlu menggunakan
indexOf()
untuk memeriksa dalam array referensi untuk id tertentu. menganggapquery
adalah permintaan yang Anda jalankan, menganggapsomeModel
adalah model mongo untuk id yang Anda cari, dan akhirnya menganggapresults.idList
bidang yang Anda cari id objek Anda.sumber
let exists = results.idList.filter(val => val.toString() === thisIsTheStringifiedIdWeAreLookingFor).length ? true : false
const exists = results.idList.some(val => val.toString() === thisIsTheStringifiedIdWeAreLookingFor)
atauconst exists = results.idList.some(val => val.equals(someModel._id))
Menurut hal di atas, saya menemukan tiga cara untuk menyelesaikan masalah.
AnotherMongoDocument._id.toString()
JSON.stringify(AnotherMongoDocument._id)
results.userId.equals(AnotherMongoDocument._id)
sumber
Saya menghadapi masalah yang sama persis dan saya hanya menyelesaikan masalah dengan bantuan
JSON.stringify()
sebagai berikut: -sumber
Tiga kemungkinan solusi yang disarankan di sini memiliki berbagai kasus penggunaan.
Gunakan .equals saat membandingkan ObjectID pada dua mongoDokumen seperti ini
results.userId.equals (AnotherMongoDocument._id)
Gunakan .toString () saat membandingkan representasi string dari ObjectID ke ObjectID dari mongoDocument. seperti ini
results.userId === AnotherMongoDocument._id.toString ()
sumber