Mongoose查询数组中的最后一项

y1aodyip  于 2023-06-06  发布在  Go
关注(0)|答案(1)|浏览(380)

我想构造一个Mongoose查询来查询嵌套在数组中的字段。集合中的每个文档可能有一个不同长度的数组,我只想查询每个数组中的最后一个条目。
下面是我的文档结构:

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

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

以下是我迄今为止的一些非常天真的方法。第一个不能编译,最后一个得到运行时错误(“Cannot read property 'username' of 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'
                }));
    . . .

如何正确地构造查询?

yqkkidmi

yqkkidmi1#

以前错过了一些明显的东西。答案是:

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));   
                })

相关问题