Anton_P
(Anton P)
January 1, 2022, 10:37pm
1
Hi, I’m working with MongoDB Realm Functions and found unexpected behavior while I was trying to check for network response status code.
const response = await context.http.get({ url: 'https://api.github.com/asd' });
console.log(response.statusCode); // 404
console.log(typeof 404); // number
console.log(typeof response.statusCode); // number
console.log(response.statusCode == 404); // true
console.log(response.statusCode === 404); // true
console.log([404].includes(404)); // true
console.log([404].includes(response.statusCode.valueOf())); // true
console.log([404].includes(response.statusCode)); // false
So I’m curious why both ==
and ===
evaluates to true
while includes
evaluates to false
for a statusCode
field which is number
? Where I can read about the difference between MongoDB Realm JS and standard JS to improve my expectations? Thanks!
henna.s
(Henna Singh)
March 11, 2022, 7:56pm
3
Hello @Anton_P ,
I acknowledge the timeline since your post and it’s a fair question to raise
There is a difference in process-engine for MongoDB Realm JS and standard JS. That said, MongoDB Realm does follow the standard JS specifications.
In this case ==
and ===
both returning true is expected as both operands are the same value and same type without any coercion mystery.
The include
returning false
here is a bug on our end. I have raised your concern with the engineering team and I will keep you posted on the update.
Genuinely appreciate your patience with us
Cheers,
2 Likes
Anton_P
(Anton P)
March 19, 2022, 9:38am
5
The other strange thing I noticed today:
const objects1 = await db.collection("collection").distinct("_id");
console.log(typeof objects1[0]); // object
console.log(objects1[0]); // 61b102c0048b84e9c13e6429
console.log(objects1[0].valueOf()); // 61b102c0048b84e9c13e6429
const objects2 = await db.collection("collection").distinct("_id");
objects2.sort();
console.log(typeof objects2[0]); // object
console.log(objects2[0]); // ObjectID("61b102c0048b84e9c13e6429")
console.log(objects2[0].valueOf()); // ObjectID("61b102c0048b84e9c13e6429")
So when I use sort()
operator on a received collection of ObjectIDs they are transformed to some other objects and I don’t even know how to get a value from such objects.
Anton_P
(Anton P)
March 19, 2022, 10:18am
6
And of course it’s hard to work with ObjectId overall
const id1 = new BSON.ObjectId('6235acd8850c208d65896cf9');
const id2 = new BSON.ObjectId('6235acd8850c208d65896cf9');
console.log(id1 == id2); // false
console.log(id1.valueOf() == id2.valueOf()); // false - I thought I can use that =[
console.log(id1.toString() == id2.toString()); // true
henna.s
(Henna Singh)
March 23, 2022, 2:13pm
7
Hello @Anton_P ,
This is normal JS behaviour
const myObj1 = { id: 222 };
const myObj2 = { id: 222 };
console.log(myObj1 == myObj2); // false
There is a specific method to compare ObjectId.
var a = ObjectId("6235acd8850c208d65896cf9");
var b = ObjectId("6235acd8850c208d65896cf9");
console.log(a.equals(b)); // true
You can read more on ObjectId .
Cheers,
2 Likes
system
(system)
Closed
March 28, 2022, 2:14pm
9
This topic was automatically closed 5 days after the last reply. New replies are no longer allowed.