【发布时间】:2015-05-14 06:43:07
【问题描述】:
我读过一些关于 Mongoose 的文章,比如它无法管理嵌套种群。
事实上,当我调用 findOne() 时,返回的对象能够使用 populate 函数。但它似乎不起作用......
你能帮我处理一个 2 级填充吗?多个查询不是问题。
这是我的 CoffeeScript 代码:
Agency.findOne({"agencyUsers": idUser}, '_id agencyUsers agencySites agencyDevices').populate([
{path: 'agencyUsers', match: { actif: true}, select: '_id userPin'},
{path: 'agencySites', match: { actif: true}, select: '_id siteName siteBuildings siteSectors siteUsers'},
{path: 'agencyDevices', match: { actif: true}, select: '_id deviceMac'}
])
.exec((err, res)=>
if err
deffered.reject err
else
res.populate('agencySites.siteBuildings', (errs, ress)=>
deffered.resolve(res)
)
)
编辑:
根据我们需要在站点中填充建筑物的事实(在机构中)
AgencySchema:
{
agencyName: String,
agencyStreet: String,
agencyCity: String,
agencyPostal: String,
agencyCountry: String,
agencyPhone: String,
agencyFax: String,
agencyMail: String,
agencySiret: String,
agencyAgencies: [
{ type: Schema.ObjectId, ref: 'Agency' }
],
agencyDevices: [
{ type: Schema.ObjectId, ref: 'Device' }
],
agencySites: [
{ type: Schema.ObjectId, ref: 'Site' }
],
agencyUsers: [
{ type: Schema.ObjectId, ref: 'User' }
],
agencyModules: [
{ type: Schema.ObjectId, ref: 'Module' }
],
actif: {type: Boolean, default: true},
actif_date: { type: Date, default: null },
creation_date: { type: Date, default: Date.now },
edit_date: { type: Date, default: null }
}
网站架构:
{
siteName: String,
siteStreet: String,
siteCity: String,
sitePostal: String,
siteCountry: String,
sitePhone: String,
siteMail: String,
siteAgencies: [
{ type: Schema.ObjectId, ref: 'Agency' }
],
siteUsers: [
{ type: Schema.ObjectId, ref: 'User' }
],
siteSectors: [
{ type: Schema.ObjectId, ref: 'Sector' }
],
siteBuildings: [
{ type: Schema.ObjectId, ref: 'Building' }
],
siteModules: [
{ type: Schema.ObjectId, ref: 'Module' }
],
actif: {type: Boolean, default: true},
actif_date: { type: Date, default: null },
creation_date: { type: Date, default: Date.now },
edit_date: { type: Date, default: null }
}
建筑架构:
{
buildingName: String,
buildingFloors: [
{ type: Schema.ObjectId, ref: 'Floor' }
],
actif: {type: Boolean, default: true},
actif_date: { type: Date, default: null },
creation_date: { type: Date, default: Date.now },
edit_date: { type: Date, default: null }
}
【问题讨论】:
-
您的架构将是在这里看到的重要部分。
-
我添加了 Coffeescript 标签,因为这与 JavaScript 无关。
标签: javascript node.js mongodb mongoose