Мангуста запрос на последний элемент в массиве - PullRequest
0 голосов
/ 23 сентября 2019

Я хотел бы создать запрос Mongoose для запроса к полю, вложенному в массив.Каждый документ в коллекции может иметь массив различной длины, и я хочу запрашивать только последнюю запись в каждом массиве.

Вот моя структура документа:

User:
-- authData
   -- []
      --username
         --value
i.e, 

UserSchema = new Schema({
  authData: [{
    username: {
       value: String
    }
  }]
})


Вот некоторые измои очень наивные подходы пока.Первый не компилируется, а последний получает ошибки времени выполнения («Не удается прочитать свойство 'username' undefined"):

Approach 1:
   UserObj.find({authData[authData.length].username.value: 'john'}, function(err, docs){});

Approach 2:
        UserObj.find({}, function(err, docs){
            docs.filter(doc =>
                doc['authData'].filter((itm,idx,arr)=>{
                    arr[itm.length-1].username.value === 'john'
                }));
    . . . 


Есть идеи, как правильно построить запрос?Спасибо!

1 Ответ

0 голосов
/ 24 сентября 2019

Пропустил что-то очевидное ранее.,,Ответ:

     UserObj.find({}, function(err, docs){
         let result = docs.filter(doc =>
             doc['authData'].filter((itm,idx,arr)=>{
                 arr[arr.length-1].username.value === 'john'
     }));

Или чуть более элегантная / полная версия:

            let result = docs.
                map(doc=>doc['authData'].pop()).
                filter(auth => 
                         auth.username.value === req.query.username).
                map(itm=>itm.username.value);    
                res.json(JSON.stringify(result));   
                })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...