Mongo 对象彼此不相等
Mongo ObjectIDs not equal to eachother
new Mongo.ObjectID('18986769bd5eaaa42cb565b1') == new Mongo.ObjectID('18986769bd5eaaa42cb565b1')
returns 假
new Mongo.ObjectID('18986769bd5eaaa42cb565b1').toString() == new Mongo.ObjectID('18986769bd5eaaa42cb565b1').toString()
returns 真
这是一个错误、一个功能,还是我只需要使用 valueOf() 来处理它们,并在我需要使用数据库时将其从字符串转换回?
这是完全正常的,因为两个对象彼此不相等,即使它们包含相同的信息。您需要遍历所有属性并单独比较它们。
console.log({} === {});
例子
const obj1 = {id: 12345}
const obj2 = {id: 12345}
console.log(obj1 === obj2);
let same = true;
for(const prop in obj1){
if(obj2.hasOwnProperty(prop) && obj1[prop] !== obj2[prop]){
same = false;
break;
}
}
console.log(same);
这是因为 MongoDB 完全基于 JSON,所以即使特定信息本身是字符串,Mongo 仍然将其作为 JSON 目的。因此,您需要将其解析回字符串形式,以便您可以在其他地方使用它。
你应该看看这个 question,它可能会解决你的问题。基本上,他们说您需要使用您正在使用的 mongo 库提供的 equals 方法
ObjectId("507c7f79bcf86cd7994f6c0e").valueOf() === "507c7f79bcf86cd7994f6c0e" //true
ObjectId("507c7f79bcf86cd7994f6c0e") === "507c7f79bcf86cd7994f6c0e" //false
ObjectId("507c7f79bcf86cd7994f6c0e").valueOf() === ObjectId("507c7f79bcf86cd7994f6c0e").valueOf() //true
new Mongo.ObjectID('18986769bd5eaaa42cb565b1') == new Mongo.ObjectID('18986769bd5eaaa42cb565b1')
returns 假
new Mongo.ObjectID('18986769bd5eaaa42cb565b1').toString() == new Mongo.ObjectID('18986769bd5eaaa42cb565b1').toString()
returns 真
这是一个错误、一个功能,还是我只需要使用 valueOf() 来处理它们,并在我需要使用数据库时将其从字符串转换回?
这是完全正常的,因为两个对象彼此不相等,即使它们包含相同的信息。您需要遍历所有属性并单独比较它们。
console.log({} === {});
例子
const obj1 = {id: 12345}
const obj2 = {id: 12345}
console.log(obj1 === obj2);
let same = true;
for(const prop in obj1){
if(obj2.hasOwnProperty(prop) && obj1[prop] !== obj2[prop]){
same = false;
break;
}
}
console.log(same);
这是因为 MongoDB 完全基于 JSON,所以即使特定信息本身是字符串,Mongo 仍然将其作为 JSON 目的。因此,您需要将其解析回字符串形式,以便您可以在其他地方使用它。
你应该看看这个 question,它可能会解决你的问题。基本上,他们说您需要使用您正在使用的 mongo 库提供的 equals 方法
ObjectId("507c7f79bcf86cd7994f6c0e").valueOf() === "507c7f79bcf86cd7994f6c0e" //true
ObjectId("507c7f79bcf86cd7994f6c0e") === "507c7f79bcf86cd7994f6c0e" //false
ObjectId("507c7f79bcf86cd7994f6c0e").valueOf() === ObjectId("507c7f79bcf86cd7994f6c0e").valueOf() //true