首页 > 解决方案 > 如何使用条件参数在mongodb中查询多个文档

问题描述

我有带有groupIdcreatedTS字段的消息文档。并且对于查询,我有带有groupIdand的对象数组lastVisit。我想在groupId之后查询所有消息lastVisit

我尝试使用groupIds$in但它没有过滤createdTSlastVisit

成员模式

const GroupMemberSchema = new mongoose.Schema({
  userId: { type: String, required: true },
  groupId: { type: String, required: true },
  addTS: { type: Date, default: Date.now },
  lastVisit: { type: Date, default: Date.now }
});

消息模式

const GroupMessageSchema = new mongoose.Schema({
  id: { type: String, required: true },
  groupId: { type: String, required: true },
  content: { type: String, required: true },
  createdTS: { type: Date, default: Date.now },
});

查询

GroupMessage.find({groupId: {$in: groupIds}})

标签: javascriptmongodbmongoose

解决方案


如果我理解的问题是正确的,那么您需要获取与每个匹配groupId且同时大于适当的记录lastVisit。如果将其转换为 MongoDB 查询,它将是这样的:

{
  "$or": [
    {
      "$and": [
        { "groupId": _groupId[i] }, 
        { "createdTS": { "$gt": _lastVisit[i] } } 
      ]
    },
    ...
  ]
}

其中_groupId[i]_lastVisit[i]是组列表和 lastVisit 时间戳的数组元素。


推荐阅读