Как сопоставить два разных идентификатора объектов с помощью запроса MongoDB find ()?

#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?