Mongoose: запрос вложенного массива с помощью findOne () и проецирование - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть коллекция городов с документами следующей структуры:

city = {
    "_id" : ObjectId("5b7b9eac23cad92dbd81f92b"),
    "stores" : [
        {
            "name" : "someName",
            "storeId" : "5b9350dc97c35614731e03df"
        }
     ]
}

Как запросить города коллекции по storeId и получить объект city в Mongoose с помощью findOne ()?

Я пробовал следующие способы, но в обоих случаях я получаю «ноль»

query = {
   'stores.storeId' : someId
}

query = {
   'stores': {'$elemMatch': {'storeId': someId}}
}

Cities.findOne(query)
.then( city => {
   console.log('city: '+ city);
});

Тогда я пытался спроецировать только имя. Я думал об использовании:

options = {
   select: { 'stores.$.name': 1 }
}

Cities.findOne(query, {}, options)
.then( name => {
   console.log('name: '+ name);
});

Но я не знаю, сработает ли это, поскольку мне даже не удалось его запросить ...

1 Ответ

0 голосов
/ 08 сентября 2018

Я нашел ошибку: ... В базе данных storeId был сохранен как String вместо ObjectId, но в схеме он был установлен как mongoose.Schema.Types.ObjectId. Когда я изменил схему на String, документ был найден.

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