我正在尝试创建一个中间件,它将检查数据库中是否存在 2 个用户之间的对话,如果不存在,它将创建一个新对话。我正在尝试将 moongoose $in
与用户的 2 个 ID 一起使用,但它会返回包含任何 ID 的任何对话,我只需要检索 ID 一起包含在用户数组。
Chat.findOne({
users: {
$in: [
mongoose.Types.ObjectId(MYUSER),
mongoose.Types.ObjectId(OTHERID2),
],
},
})
假设 “MYUSER”
与 “RANDOMID”
进行对话,然后我开始与 “OTHERID2”
进行新对话, mongoose 检测到 "MYUSER"
已经开始对话,但它不会检查对话是否在 2 个用户之间。
聊天架构
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" }],
});
最佳答案
您需要将 $in
替换为 $all仅当所有指定值都包含在数组中时才返回 true:
Chat.findOne({
users: {
$all: [
mongoose.Types.ObjectId(MYUSER),
mongoose.Types.ObjectId(OTHERID2),
],
},
})
关于javascript - 查找 2 id 在 Mongoose 数组中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63220206/