当我尝试通过卖家 ID 获取库存编号时,为什么 $and 运算符在 mongodb mongoose 中不起作用?

why is $and operator not working in mongodb mongoose when iam trying to fetch stock number through sellerId?

我正在使用此函数通过 sellerId 获取库存编号,而不是一条记录 我得到了所有这些。

const fetchStock = (req, res) => {

  StockModel.findOne({$and: [{ "productId": req.body.productId._id }, { "sellerId": req.body.sellerId }] })
    .then((stock) => {
      res.json(stock);
    })
    .catch((err) => {
      res.json({ Message: "Internal Server Error.", err });
    });
};

作为回应,我得到了

这里没有必要使用$and,只需要这样做:

const fetchStock = (req, res) => {
  StockModel.findOne({ "productId": req.body.productId._id, "sellerId": req.body.sellerId })
    .then((stock) => {
      res.json(stock);
    })
    .catch((err) => {
      res.json({ Message: "Internal Server Error.", err });
    });
};

您只需要在某些情况下使用 $and,例如,您正在检查 相同 age 属性,像这样:

{
  $and: [{ age: { $gt: 2 } }, { age: { $lte: 4 } }];
}

试试这个:

const fetchStock = async (req, res) => {
   try {
      const { productId, sellerId } = req.body;
      let stock = await StockModel.findOne({ "productId": productId._id, "sellerId": sellerId  })
      await res.json(stock);
   } catch (err) {
      res.json({ Message: "Internal Server Error.", err });
   }
}

这不可能,findOne returns 你的文档数组,可能你重新编写了代码,但你忘记了重启服务器/刷新页面/重新发送查询。