我在使用投影/聚合返回嵌套数组myShows.showChoices
内的对象时遇到问题。 (如果这是接近这个的正确方法)。
每当我尝试通过查找节目的名称或ID来尝试使用.find()时,它只会返回名称或Id而没有任何其他内容。我正在尝试返回该对象的所有内容。包括名称,概述,poster_path等...(基本上是对象本身)
我的架构:
const userSchema = new Schema({
email:{
type: String,
unique: true,
lowercase: true,
trim: true,
required: 'Please Provide an email address'
},
name: {
type: String,
required: 'Please supply a name',
trim: true,
},
myShows: {
topRated: [],
showChoices: []
});
我推入myShows.showChoices
的对象看起来像
{
name: "Name of Show",
poster_path:"/x2WKIbiwhLoWgLFbT2I0Gwq8U1J.jpg",
genre_ids: [37, 878],
overview: "show description",
id: 63247
}
我试过了:
const show = await User.find(
{ _id: req.user.id },
{ showChoices: { $elemMatch: { name: "Name of Show" } } }
)
更新:1
投影/聚合的几种变体。这是我最近的尝试。 (坚持在最后一场比赛之后该做什么。)
const show = await User.aggregate([
{ "$match": {
"_id" : req.user._id,
"myShows.showChoices.id": showIDVar
}},
{ $unwind: "$myShows.showChoices" },
{ $match: {
"myShows.showChoices.id": showIDVar
}},
])
我认为我过去的.find()查询的问题是我只搜索节目的名称或ID(不是_id)
const show = await User.find(
{ _id: req.user.id },
{ "myShows.showChoices": { name: "Name of Show" } }
)
这只会返回节目本身的名称。无论如何只通过查询名称来返回对象的所有内容?
有关如何处理此事的任何建议?
// Expected output is to have
const show =
{
name: "Name of Show",
poster_path:"/x2WKIbiwhLoWgLFbT2I0Gwq8U1J.jpg",
genre_ids: [37, 878],
overview: "show description",
id: 63247
};
答案 0 :(得分:0)
你快到了;只需要添加$project
阶段:
const show = await User.aggregate([
{ "$match": {
"_id" : req.user._id,
"myShows.showChoices.id": showIDVar
}},
{ $unwind: "$myShows.showChoices" },
{ $match: {
"myShows.showChoices.id": showIDVar
}},
{ $project: {
"myShows.showChoices.name": 1,
"myShows.showChoices.poster_path": 1,
"myShows.showChoices.genre_ids": 1,
"myShows.showChoices.overview":1
}},
])