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

时间:2018-05-07 10:36:39

标签: javascript node.js mongoose

如果mongoose为find()或findOne(),则返回值分别为[]和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);
    }
}

有没有办法跳过[]或null来通过promises.push(message)行分配给数组消息。

1 个答案:

答案 0 :(得分:0)

不使用 holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SeatDetails seatDetails = seatDetailsList.get(position); if (seatDetails.isSelected){ seatDeselected(position); holder.getImageView().setImageBitmap(seatSelect); // Modify state } else { seatSelected(position); holder.getImageView().setImageBitmap(seatSelect); // Modify state } } }); 方法,而是使用技巧从消息数组中删除所有filterMessage值。如下:

falsy

Falsy值包括:

messages =  messages.filter(Boolean)
  

https://developer.mozilla.org/en-US/docs/Glossary/Falsy

了解有关假值的更多信息