我的文档有字段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"
]
}
}
}
}
}
])
工作示例