Javascript 跳过要分配给mongoose中数组的null或空对象
对于mongoose find()或findOne(),如果其中的条件不为true,则返回值分别为[]和null。这个返回值被分配给数组,但我不希望它发生。目前,我正在执行filterMessage()以跳过数组中的所有空值,但这不是处理大量消息的理想方法。代码如下:Javascript 跳过要分配给mongoose中数组的null或空对象,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,对于mongoose find()或findOne(),如果其中的条件不为true,则返回值分别为[]和null。这个返回值被分配给数组,但我不希望它发生。目前,我正在执行filterMessage()以跳过数组中的所有空值,但这不是处理大量消息的理想方法。代码如下: async media(receiverId, page, size, callback) { var promises = []; var groupMessageMaps = await GroupMessag
async media(receiverId, page, size, callback) {
var promises = [];
var groupMessageMaps = await GroupMessageMap.find({
groupId: receiverId.toString()
});
groupMessageMaps.map((groupMessageMap) => {
var message = Message.findOne({
$and: [{
_id: groupMessageMap.messageId
}, {
'type': {
$in: ['image', 'video', 'doc']
}
}]
}); //if Message.findOne() is null then not push to the array
promises.push(message);
});
var messages = await Promise.all(promises);
console.log(messages); //contains null values also
messages = this.filterMessage(messages).reverse();
if (messages.length < size) {
callback(messages);
} else {
messages = messages.splice(messages.length - size);
callback(messages);
}
}
异步媒体(接收方ID、页面、大小、回调){
var承诺=[];
var groupMessageMaps=等待GroupMessageMap.find({
groupId:receiverId.toString()
});
groupMessageMaps.map((groupMessageMap)=>{
var message=message.findOne({
美元及:[{
_id:groupMessageMap.messageId
}, {
“类型”:{
$in:[“图像”、“视频”、“文档”]
}
}]
});//如果Message.findOne()为null,则不推送到数组
承诺。推送(信息);
});
var消息=等待承诺。全部(承诺);
console.log(messages);//也包含空值
messages=this.filterMessage(messages.reverse();
if(messages.length那么,有没有办法跳过[]或null以通过行承诺分配给数组消息。推送(消息)。而不是使用
filterMessage
方法使用技巧从消息数组中删除所有falsy
值。详情如下:
messages=messages.filter(布尔值)
Falsy值包括:
false
null
undefined
0
NaN
''
""
有关falsy值的更多信息,请访问:
我已经试过了。就在promises.push(message)之前,我使用了if(message)then do promises.push(message)。但是仍然推送null(如果消息为null)。不,您不能在承诺之前执行此操作,
message.findOne
返回一个承诺对象,而不是返回的值,此时消息包含一个承诺对象,并且您的if
条件始终为true。在使用此.filterMessage的位置使用它