我正在尝试创建一个中间件,该中间件将检查数据库中是否存在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" }],
});
答案 0 :(得分:2)
您需要将$all替换为$in
,只有在所有指定值都包含在数组中的情况下,该{{3}}才返回true:
Chat.findOne({
users: {
$all: [
mongoose.Types.ObjectId(MYUSER),
mongoose.Types.ObjectId(OTHERID2),
],
},
})