我需要一些关于使用mongoose填充和虚拟的帮助。
当我使用
获取“cidade”列表时router.get('/',function(req,res,next){ ....
我想将结果与“estado”中的一些额外信息填充为“_id”和“nome”。
但是,当我在控制台中打印结果时,我只有“cidade”的结果,而且没有来自“estado”的数据信息。
'cidade'和“estado”之间的关系是N:1,字段'uf'是两个集合的链接。
我做错了什么?
以下是馆藏数据样本
//cidades
"_id":213123......
"uf":"AL"
"cidade":"ARARAS"
......
//estados
"_id":2aaa3123......
"uf":"AL"
"nome":"AZALU"
.....
//router to cidades
'use strict';
const express = require('express');
const router = express.Router();
//const querystring = require('querystring');
const Cidade = require('../models/cidade');
const callback=function(err,data,res){
console.log(data);//??? only data from "cidade", no "estado" info
if (err) return res.status(500).json(err);
return res.status(200).send(data);
};
router.get('/',function(req,res,next){
const query=new RegExp(req.query.where,'i');
Cidade.find({ cidade: query })
.populate('id_estado')
.exec( (err,data) => {
callback(err,data,res)
})
});
//model estados
estadosSchema = new mongoose.Schema({
uf: {type: String, unique:true},
nome: {type: String, unique:true}
});
module.exports = mongoose.model('Estado', estadosSchema,'estados' );
//model cidades
cidadesSchema = new mongoose.Schema({
uf: {type: String, unique:true},
cidade: {type: String, unique:true}
},{ toJSON: { virtuals: true } });
cidadesSchema.virtual('id_estado', {
ref: 'Estado', // The model to use
localField: 'uf', // Find Estado where `localField`
foreignField: 'uf', // is equal to `foreignField`
justOne: false
});
module.exports = mongoose.model('Cidade', cidadesSchema,'cidades' );