我正在构建一个聊天应用程序,但我被一个查询卡住了。我将聊天内容存储在对象数组中。我想获取与对象值的键匹配的聊天记录。我正在使用mongoose库来查询mongodb。请一定要帮我解决这个问题。
我的聊天模式是:
chats: [
{
sentFrom: 'user1',
sentTo: 'athlete1',
message: 'hi'
},
{
sentFrom : 'user2',
sentTo: 'athlete1',
message: 'hi athleyte'
}
]
我想找出sentFrom值为'user1‘的所有聊天记录。
这是我的code,它不工作了。
发布于 2020-10-15 16:20:56
从你的文档中,
您正在对整个集合进行匹配,并且您的条件是chats.sentFrom应等于user1,这就是为什么在这种情况下,如果任何其他文档具有类似类型的数据,它将返回2个文档,以便过滤出该数组,您将不得不使用使用聚合的$filter
db.test.aggregate([
{ $match: {_id: ObjectId("5f87fec2e80b410a20c6819a")}},
{ $project: {
chats: {$filter: {
input: '$chats',
as: 'chat',
cond: {$eq: ['$$chat.sentFrom', "user1"]}
}}
}}
])
发布于 2020-10-15 06:34:20
尝试筛选:
let result = chats.filter(chat => chat.sentFrom === 'user1');
https://stackoverflow.com/questions/64361860
复制相似问题