查找猫鼬数组中存在2个id的位置

时间:2020-08-02 19:27:44

标签: javascript node.js mongodb mongoose

我正在尝试创建一个中间件,该中间件将检查数据库中是否存在2个用户之间的对话,因此如果不存在,它将创建一个新对话。我正在尝试将Moongoose $in与用户的2个ID一起使用,但是它返回包含ID的任何对话,并且我只需要检索用户数组中包含ID的对话。 / p>

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

让我们让"MYUSER""RANDOMID"进行对话,然后我与"OTHERID2"开始新的对话,猫鼬检测到"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 个答案:

答案 0 :(得分:2)

您需要将$all替换为$in,只有在所有指定值都包含在数组中的情况下,该{{3}}才返回true:

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