在Mongoose数组中查找2个id是否存在

3

我正在尝试创建一个中间件,它将检查数据库中是否存在两个用户之间的对话,如果不存在,则会创建一个新的对话。我尝试使用 mongoose 的 $in 与这两个用户的 ID,但它返回任何包含任何 ID 的对话,我需要只检索包含在用户数组中同时包含这两个 ID 的对话。

Chat.findOne({
   users: {
    $in: [
      mongoose.Types.ObjectId(MYUSER),
      mongoose.Types.ObjectId(OTHERID2),
    ],
  },
})

假设“MYUSER”正在与“RANDOMID”进行对话,然后我开始与“OTHERID2”进行新的对话,mongoose检测到“MYUSER”已经开始了一次对话,但它没有检查这次对话是在哪两个用户之间进行的。
聊天记录模式
  const chatSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    lastMessage: { type: String },
    updatedOn: { type: Date, default: Date.now },
    users: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
  });
1个回答

3

您需要将$in替换为$all,它仅在数组中包含所有指定值时返回true:

Chat.findOne({
    users: {
        $all: [
            mongoose.Types.ObjectId(MYUSER),
            mongoose.Types.ObjectId(OTHERID2),
        ],
    },
})

1
你真棒,解决了我的问题!谢谢 @mickl - JDLR
@JoangelDeLaRosa 很高兴听到这个消息! - mickl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接