javascript - 查找 2 id 在 Mongoose 数组中的位置

标签 javascript node.js mongodb mongoose

我正在尝试创建一个中间件,它将检查数据库中是否存在 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/

相关文章:

javascript - node js中response.send和response.write的区别

javascript - 如何使用数据库连接运行 Mongo JS Shell 脚本

java - 查询失败,错误代码 13

database - ReactiveMongoRepository没有保存我的数据

javascript - 选择第一个选项时自动更改第二个下拉列表

javascript - 对于空字符串,如何将 parseInt 中的 NaN 转换为 0?

javascript - ReactJS 在点击时发送键(索引)

javascript - 如何多次使用时间选择器

node.js - 我们如何在 https.agent 中设置 SSL 证书密码?

javascript - 调用此函数时如何获取返回值?