Mongoose数组过滤和返回过滤后的数组



我的文档有字段roomname和字段users,这是一个数组:

['name1', 'name2', 'name3', 'name4' ,'name5' ,'name6' ,'name7']

如何从'name2'到' nam5 '过滤用户数组?我通过编码从'name1'到' nam7 '数组:

roommodel.find({roomname:'room1'},'users').then(res=>{
console.log(res)
})

当像这样的用户数量较少时,有一种方法:

let filteredusers=res.slice(1,4).map(i=>return i)

如果有大量的数组,它可能会减慢服务器。我想知道是否有直接方法。

您可以使用$ninMongodb查询条件如下:

roommodel.find({
roomname:'room1', 
username: { $nin: [ 'name1', 'name7' ] }},'users')
.then(res=>{
console.log(res)
})

可以使用Aggregation框架。注意,您必须传递用户的所有索引的输入要返回的数组。

  • $match过滤相关文件
  • $map遍历索引的输入数组
  • $arrayElemAt返回users的元素索引
  • 的数组
roommodel.aggregate([
{
"$match": {
"roomname": "room1"
}
},
{
"$set": {
"users": {
"$map": {
"input": [
2,
3,
4
],
"in": {
"$arrayElemAt": [
"$users",
"$$this"
]
}
}
}
}
}
])

工作示例

最新更新