MongoDB按对象ID在数组中查找一个文档

时间:2019-09-15 08:16:43

标签: node.js mongodb mongoose

我只能得到1张objectid的照片吗?我只需要按照片从1个帖子中获取1个图像细节,但是我所获得的是帖子的所有照片。

这是我的数据库结构

enter image description here

这是我的代码,如下所示:

 Post.findOne({
  $and: [
    { photo: { $elemMatch: { _id: id } } }       ]
}).exec((err, post) => {
  if (err) {
    return res.status(400).json({ error: err });
  }
  req.post = post;
  console.log(req.post);
  next();
});

我在req.post中得到的只是[]。

预先感谢

2 个答案:

答案 0 :(得分:2)

$elemMatch投影运算符提供了一种更改返回文档的方法,在这里结合$find使用 projection 的第二个参数即可实现。

Post.find(
  {},
  {
    _id: 0,
    photo: { $elemMatch: { _id: id } }
  }
);

这将提供具有以下承诺的精简文档:.lean().exec()

Post.find(
  {},
  {
    _id: 0,
    photo: { $elemMatch: { _id: id } }
  }
)
  .lean()
  .exec();

注意:$elemMatch的行为是返回photo的{​​{1}}匹配的第一个文档。

答案 1 :(得分:1)

您可以尝试使用聚合而不是findOne: https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/

Post.aggregate([
    { $match: { 'photo._id': id } },
    { $unwind: "$photo" },
    { $match: { 'photo._id': id } },
]);

也许不是最好的,但是可以实现单张照片数据。