javascript - 通过 mongoose 过滤自定义键或值

标签 javascript mongoose

我有一个消息架构,有两种类型的消息:文本和语音,我应该如何获取文本值?

文本数据示例:

{
    "_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/

相关文章:

javascript - 在 Promise 中包装异步循环

javascript - 使用 WinJS 进行错误处理

javascript - 使用 jQuery 编写大量 HTML 代码的好方法是什么?

node.js - Mongoose 唯一验证错误类型

javascript - Jquery切换背景颜色

javascript - Chrome开发者工具(如何知道我正在调用哪个javascript对象)

node.js - Mongoose 删除文档引用

json - 使用 Mongoose/NodeJS 修改具有多个键的嵌套对象,而不替换现有键

javascript - Mongoose/Mongodb findOneAndUpdate 同时保留已有内容

node.js - 如何将数据库服务与分页和过滤隔离