Найти документ, используя массив, с или без $ in? - PullRequest
0 голосов
/ 09 мая 2019

Я хочу найти документы в своей коллекции, используя массив firstNames. Если я делаю это простым MongoDB, в документации говорится, что я должен использовать $ in. Но когда я использую Mongoose, кажется, что $ in не нужен.

Установка:

const Person = mongoose.model('person', new mongoose.Schema({
  firstName: {type: String, required: true},
  lastName: {type: String, required: true}
})

await Person.create([
  {firstName: 'Pelle', lastName: 'Larsson'},
  {firstName: 'Kalle', lastName: 'Jansson'},
  {firstName: 'Lotta', lastName: 'Nilsson'}
])

const wantedFirstNames = ['Pelle', 'Lotta']

Найти нужных людей без использования $ in:

const wantedPersons = await Person.find({firstName: wantedFirstNames})
// Returns two matching documents

Найти нужных людей, используя $ in:

const wantedPersons = await Person.find({firstName: {$in: wantedFirstNames}})
// Also returns two matching documents

Может кто-нибудь сказать мне, можно ли пропустить $ in или эти два примера делают что-то другое? Это где-то задокументировано?

Обновление

Я разместил вопрос на странице mongoose github и получил отличный ответ: https://github.com/Automattic/mongoose/issues/7789 Как говорит @ HRK44. Mongoose увидит, что wantedFirstNames - это массив, а firstName - строка, поэтому в любом случае используйте $.

1 Ответ

1 голос
/ 09 мая 2019

Два решения похожи.

Часть документации, которая может вам помочь, находится там: https://mongoosejs.com/docs/api.html#model_Model.find

Я думаю, что эта часть актуальна:

Условия приводятся к их соответствующим типам SchemaType до Команда отправлена.

Часть кода, где это делается, может быть найдена там: https://github.com/Automattic/mongoose/blob/master/lib/cast.js#L296

Строка 305:

obj[path] = { $in: casted };

Но я согласен, что документация не очень ясна по этому вопросу ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...