过滤自定义键或值

过滤自定义键或值

我有一个带有2种类型消息的Message模式:文本和语音,如何获取文本值?

文字数据示例:

{
    "_id" : ObjectId("5a8ea03d2601be24b086ccd4"),
    "userId" : 20,
    "text" : "Hi",
    "__v" : 0
}


语音数据示例:

   {
        "_id" : ObjectId("5a8ea03d2601be24b086ccd4"),
        "userId" : 20,
        "voice" : "d2601be24bd22601be24b",
        "__v" : 0
    }


码:

Message
  .find({userId: '20'}, {_id: 0, text: ''})
  .exec((err, obj) => {
    if (err) {
      console.log(err);
    }

    for (const val of Object.values(obj)) {
      console.log(val.text);
    }
  });


输出:

Hi    // for text
undefined  // for voice


我的输出中有所有类型的消息,如何获取所有文本值? (不是声音)?

最佳答案

几个选项,您可以在for循环中添加if语句,例如

for (const val of Object.values(obj)) {
    if(val.text) console.log(val.text);
}


或者,您可以调整数据库查询,以仅选择带有非空文本字符串的消息,例如

Message
  .find(
    {
       userId: '20',
       text: {
           $exists: true,
           $ne: ''
    },
    {_id: 0, text: ''}
  )


注意:我的查询可能不正确,因为我没有对其进行测试,但是这样做可能会有所帮助。有关类似概念,请参见:Find MongoDB records where array field is not empty

关于javascript - 通过 Mongoose 过滤自定义键或值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48952005/

10-12 12:28