Node.js 在mongodb中查找chats数组中对象值的所有匹配项

Node.js 在mongodb中查找chats数组中对象值的所有匹配项,node.js,mongodb,express,Node.js,Mongodb,Express,我正在开发一个聊天应用程序,我被一个查询卡住了。我的聊天记录存储在一组对象中。我想获取与对象值的键匹配的聊天记录。我正在使用mongoose库查询mongodb。请帮我解决这个问题 我的聊天模式是: chats: [ { sentFrom: 'user1', sentTo: 'athlete1', message: 'hi' }, { sentFrom : 'user2', sentTo: 'athlete1', message: 'h

我正在开发一个聊天应用程序,我被一个查询卡住了。我的聊天记录存储在一组对象中。我想获取与对象值的键匹配的聊天记录。我正在使用mongoose库查询mongodb。请帮我解决这个问题

我的聊天模式是:

chats: [
  {
    sentFrom: 'user1',
    sentTo: 'athlete1',
    message: 'hi'
  },
  {
    sentFrom : 'user2',
    sentTo: 'athlete1',
    message: 'hi athleyte'
  }
]
我想找到sentFrom值为“user1”的所有聊天记录

这是我的,它不工作。

请尝试筛选:

 let result = chats.filter(chat => chat.sentFrom === 'user1');
从你的文件中

您正在对整个集合进行匹配,并且您的条件是chats.sentFrom应该等于user1,这就是为什么, 如果任何其他文档在这种情况下具有类似类型的数据,它将返回2个文档以筛选出数组,您必须使用聚合使用
$filter

db.test.aggregate([
    { $match: {_id: ObjectId("5f87fec2e80b410a20c6819a")}},
    { $project: {
        chats: {$filter: {
            input: '$chats',
            as: 'chat',
            cond: {$eq: ['$$chat.sentFrom', "user1"]}
        }}
    }}
])
_id是您试图传入的ObjectId()?