【问题标题】:Find where 2 id are present in Mongoose Array查找 Mongoose Array 中 2 个 id 的位置
【发布时间】:2020-08-03 04:07:53
【问题描述】:

我正在尝试创建一个中间件,该中间件将检查数据库中是否存在 2 个用户之间的对话,如果不存在,它将创建一个新对话。我正在尝试将 moongoose $in 与用户的 2 个 id 一起使用,但它会返回包含任何 id 的任何对话,我只需要检索其中 id 一起包含在 users 数组中的对话。

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" }],
  });

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

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

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

    【讨论】:

    • 你真棒,真正解决了我的问题!谢谢@mickl
    • @JoangelDeLaRosa 很高兴听到这个消息!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多