我有一个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
我在输出中有所有类型的消息,我应该如何获得所有文本值? (不是声音)?
答案 0 :(得分:1)
几个选项,您可以在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。