我只能得到1张objectid
的照片吗?我只需要按照片从1个帖子中获取1个图像细节,但是我所获得的是帖子的所有照片。
这是我的数据库结构
这是我的代码,如下所示:
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中得到的只是[]。
预先感谢
答案 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 } },
]);
也许不是最好的,但是可以实现单张照片数据。