我有一个消息
架构,有两种类型的消息:文本和语音,我应该如何获取文本值?
文本数据示例:
{
"_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/