Mongoose Deep Populate 限制中间模型
Posted
技术标签:
【中文标题】Mongoose Deep Populate 限制中间模型【英文标题】:Mongoose Deep Populate limiting intermediate model 【发布时间】:2016-04-19 14:26:52 【问题描述】:我正在为该项目使用MongooseDeepPopulate 包。我有 SchemaA、SchemaB、SchemaC、SchemaD。我的 SchemaD,SchemaC 连接到 SchemaB,SchemaB 连接到 SchemaA。
我已经这样做了。
var deepPopulate = require('mongoose-deep-populate')(mongoose);
AlbumSong.plugin(deepPopulate,
populate:
'song.category': select: 'name status',
'song.poetId': select: 'name status'
);
song
与类别和poetId 有进一步的联系。我成功地限制了category
和poetId
的字段。但我也希望限制来自中间模型song
的字段。我的查找查询就像
AlbumSong.find(condition)
.deepPopulate('song.category song.poetId')
// .deepPopulate('song.category song.poetId' , '_id category poetId name nameHindi invalid status') // I tried this as well to limit records from song model as well.
.exec(function(err, playlist)
callback(err, playlist);
);
我哪里弄错了。
【问题讨论】:
【参考方案1】:如果你想限制AlbumSong
的字段,你可以使用mongoose itself提供的功能,像这样:
AlbumSong.find(condition)
.select('_id category poetId name nameHindi invalid status')
.deepPopulate(...)
Here is 一个简单的应用程序来演示这个想法。 架构如下所示:
var userSchema = new Schema(
name: String,
email: String
);
var CommentSchema = new Schema(
author : type: Schema.Types.ObjectId, ref: 'User',
title: String,
body: String
)
var PostSchema = new Schema(
title: String,
author: type: Schema.Types.ObjectId, ref: 'User' ,
comments: [type: Schema.Types.ObjectId, ref: 'Comment'],
body: String
);
PostSchema.plugin(deepPopulate,
populate:
'author': select: 'name' ,
'comments': select: 'title author' ,
'comments.author': select: 'name' ,
);
deepPopulate
设置高于相关author
、comments
和comments.author
的限制字段。
要获取帖子本身的帖子和限制字段,我使用以下方法:
Post.find().select('title author comments').deepPopulate('author comments.author').exec(function(err, data)
// process the data
);
数据如下:
[
"_id": "56b74c9c60b11e201fc8563f",
"author":
"_id": "56b74c9b60b11e201fc8563d",
"name": "Tester"
,
"title": "test",
"comments": [
"_id": "56b74c9c60b11e201fc85640",
"title": "comment1",
"author":
"_id": "56b74c9b60b11e201fc8563e",
"name": "Poster"
]
]
所以对于帖子本身,我们只有title
(body
未被选中)。
对于填充的记录,所选字段也受到限制。
【讨论】:
以上是关于Mongoose Deep Populate 限制中间模型的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB 中的关联查询MongoDB : aggregate/lookup 对比 Mongoose : ref / populate