如何检查ID是否在数组猫鼬中

时间:2019-09-16 09:51:54

标签: mongodb mongoose

我的API REST中有一个端点,该端点将检查我从req.body{users: ['id1','id2']})收到的id对象是否在我的数据库中。

我有这个:

router.post(
  '/checkchat',
  isLoggedIn(),
  async (req, res, next) => {
    const { users } = req.body;
    const chats = await Chat.find({
      $and: [
        {
          users: {
            $elemMatch: { $eq: users[0] }
          }
        },
        {
          users: {
            $elemMatch: { $eq: users[1] }
          }
        }
      ]
    });
    if (chats.length > 0) {
      res.status(205).json(chats);
    } else {
      const chat = await Chat.create({
        users: users.users,
        messages: []
      });
      await User.findByIdAndUpdate(users[0], { $push: { chats: chat } });
      await User.findByIdAndUpdate(users[1], { $push: { chats: chat } });
      res.status(200).json(chat);
    }
  }
);

我在猫鼬文档$elemMatch中找到了它,但是它不起作用。总是在等待Chat.find中找到0个项目……这意味着条件($ and:...)不起作用

我需要检查id对象是否在db的users数组中...

对不起,我的英语不好:(

1 个答案:

答案 0 :(得分:1)

尝试$in可以解决问题:

 User.find({userId: { $in : ['id1','id2']} }) 
  

$ in运算符选择字段值等于指定数组中任何值的文档。指定$ in表达式