繁体   English   中英

如何从给定objectid的mongodb中的对象数组中检索对象

[英]How to retreive an object from an array of Objects in mongodb given a objectid

我有一系列评论,我只想从模式内的一组对象中检索评论。

这是我的架构:

const sellerSchema = new mongoose.Schema({
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "User",
    unique: true,
  },
  reviews: [
    {
      by: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "User",
        unique: true,
      },
      title: {
        type: String,
      },
      message: {
        type: String,
      },
      rating: Number,
      imagesUri: [{ String }],
      timestamp: {
        type: Date,
        default: Date.now,
      },
    },
  ],
});

如果 'by' 将是 req.user._id,我如何从数组中获得单个评论。 我有以前的代码,但它不能只检索满足查询的评论。

try {
    const seller_id = mongoose.Types.ObjectId(req.params._id);
    const review = await Seller.findOne(
      { _id: seller_id },
      { reviews: { $elemMatch: { by: req.user._id } } } //get the review that matches to the user_id
    );
    res.status(200).send(review);
  } catch (err) {
    //sends the status code with error code message to the user
    res.status(502).send({
      error: "Error retreiving review.",
    });
  }

这将检索整个卖方文档,但我只想使用给定的 user_id === by: ObjectID 检索对象评论

试试看

try {
const seller_id = mongoose.Types.ObjectId(req.params._id);
const review = await Seller.findOne(
  { _id: seller_id , "reviews.by": req.user._id}, { "reviews.$": 1 }
);
res.status(200).send(review);

}

尝试将用户_id也转换为ObjectId并将您的条件统一到一个对象中:

try {
  const seller_id = mongoose.Types.ObjectId(req.params._id);
  const user_id = mongoose.Types.ObjectId(req.user._id);
  const review = await Seller.findOne({
    _id: seller_id,
    reviews: { $elemMatch: { by: user_id } },
  });
  res.status(200).send(review);
} catch (err) {
  //sends the status code with error code message to the user
  res.status(502).send({
    error: 'Error retreiving review.',
  });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM