我有一个带有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/