使用mongoose返回不完整数据的Populate和Virtuals

时间:2017-05-20 22:32:04

标签: node.js mongoose

我需要一些关于使用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' );

0 个答案:

没有答案