Javascript 跳过要分配给mongoose中数组的null或空对象

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

对于mongoose find()或findOne(),如果其中的条件不为true,则返回值分别为[]和null。这个返回值被分配给数组,但我不希望它发生。目前,我正在执行filterMessage()以跳过数组中的所有空值,但这不是处理大量消息的理想方法。代码如下:

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的位置使用它