Хотя я сделал просто через find({_id:arr}), он тоже отдает пользователей
Это прямо неожиданно:
test> db.coll.drop()
true
test> db.coll.insertMany([{a: 1}, {a: 2}, {a: 3}, {a: 4}, {a: 5}])
{
acknowledged: true,
insertedIds: {
'0': ObjectId("641c05aa3e44e79125b1e069"),
'1': ObjectId("641c05aa3e44e79125b1e06a"),
'2': ObjectId("641c05aa3e44e79125b1e06b"),
'3': ObjectId("641c05aa3e44e79125b1e06c"),
'4': ObjectId("641c05aa3e44e79125b1e06d")
}
}
test> db.coll.find({a: {$in: [2, 3]}})
[
{ _id: ObjectId("641c05aa3e44e79125b1e06a"), a: 2 },
{ _id: ObjectId("641c05aa3e44e79125b1e06b"), a: 3 }
]
test> db.coll.find({a: [2, 3]})
test> db.coll.createIndex({a: 1})
a_1
test> db.coll.find({a: {$in: [2, 3]}})
[
{ _id: ObjectId("641c05aa3e44e79125b1e06a"), a: 2 },
{ _id: ObjectId("641c05aa3e44e79125b1e06b"), a: 3 }
]
test> db.coll.find({a: [2, 3]})
test>
Может, библиотека, которую вы используете, переписывает запрос на $in, если идет сравнение по массиву, но в этом случае она ломает семантику сравнения по массивам.