#mongodb #mongoose #mongodb-query
Вопрос:
У меня есть запись, как показано ниже,
[
{
"_id":ObjectId("59ce020caa87df4da0ee2c78"),
"name": "Tom",
"owner_id": ObjectId("59ce020caa87df4da0ee2c78")
},
{
"_id":ObjectId("59ce020caa87df4da0ee2c79"),
"name": "John",
"owner_id": ObjectId("59ce020caa87df4da0ee2c78")
}
]
теперь мне нужно найти человека, который _id
равен owner_id
использованию функции find() в MongoDB.
Обратите внимание, что по какой-то причине мы не можем не использовать $match (агрегирование).
Я использую этот запрос,
db.people.find({ $where: "this._id == this.owner_id" })
но это не возвращает ожидаемый результат. Кто-нибудь может мне в этом помочь.
Спасибо.
Комментарии:
1. Попробуйте
$expr
использовать оператор with aggregate$eq
(вместо$where
)
Ответ №1:
Используя $expr
, и $eq
вы можете получить желаемые значения, избегая использования $where
на этапе поиска (не требуется агрегация).
db.collection.find({
"$expr": {
"$eq": [
"$_id",
"$owner_id"
]
}
})
Комментарии:
1. Для дополнительного контекста мы стараемся не использовать { где:»}, потому что он выполняет это как JS, и это будет намного медленнее.
2. Привет, @J. F., есть ли способ сделать это без использования $expr?