为了账号安全,请及时绑定邮箱和手机立即绑定

mongoose的population数据填充关联不成功

跟着项目做数据关联不成功,然后我找了网上的demo也是不成功,很无语。

demo如下,首先创建三个model :User、Post、Comment,然后将数据插入到数据库保存,在访问服务器时候执行createServer里面的代码,populate('posts', 'title')将Post集合的title字段填充关联到User集合里的posts字段。但是打印效果是:

[ { name: 'aikin', _id: 595639aa9a73292826000001, posts: [] } ]
[ { name: 'aikin', _id: 595639aa9a73292826000001, posts: [] } ]

为什么posts字段为空呢?

完整代码如下:

const http = require('http');
const mongoose = require('mongoose');

var Schema   = mongoose.Schema;
var ObjectId = Schema.Types.ObjectId;

var UserSchema = new Schema({
    name  : { type: String, unique: true },
    posts : [{ type: ObjectId, ref: 'Post' }]
});
var User = mongoose.model('User', UserSchema);

var PostSchema = new Schema({
    poster   : { type: ObjectId, ref: 'User' },
    comments : [{ type: ObjectId, ref: 'Comment' }],
    title    : String,
    content  : String
});
var Post = mongoose.model('Post', PostSchema);

var CommentSchema = new Schema({
    post      : { type: ObjectId, ref: "Post" },
    commenter : { type: ObjectId, ref: 'User' },
    content   : String
});
var Comment = mongoose.model('Comment', CommentSchema);


var db = mongoose.connect('mongodb://localhost/alan');

db.connection.on("error", (error) => { 
  console.log("数据库连接失败:" + error); 
}); 

db.connection.on("open", () => { 
  console.log("——数据库连接成功!——"); 
  // createData(); // 插入数据
});


function createData() {


    var users    ;
    var posts    ;
    var comments ;

    users = {
        name  : 'aikin',
        // posts : [new ObjectId]
    };
    
    posts = {
        title    : 'post-by-luajin',
        // poster   : new ObjectId,
        // comments : [new ObjectId]
    };

    comments = {
        content   : 'comment-by-aikin',
        // commenter : new ObjectId,
        // post      : new ObjectId
    };

    var _user = new User(users);
    var _post = new Post(posts);
    var _comment = new Comment(comments);
    
	_user.save((err, user) => {
		if (err) console.log(err);
		console.log(user);
	});

	_post.save((err, post) => {
		if (err) console.log(err);
		console.log(post);
	});

	_comment.save((err, comment) => {
		if (err) console.log(err);
		console.log(comment);
	});

}

http.createServer((req, res) => {
	res.writeHead(200,{"Content-Type": "text/plain"});

	/*CN.findOne({name: 'Alan'}, (err, data) => {
		console.log(data);
	});*/
	User.find()
    .populate('posts', 'title')	
    .exec(function(err, docs) {
        console.log(docs); // post-by-aikin
		res.write("hello");
		res.end();
    });

	
}).listen(4000,() => {
	console.log("Server run at port", 4000);
});

补充一下,由于我的系统是win7 32位但目前的mongodb都不支持32位的,所以我装了个2012年的mongodb 2.0.4版本,和同时间段的mongoose 2.6.0版本

正在回答

1 回答

把这种

var UserSchema = new Schema({
    name  : { type: String, unique: true },
    posts : [{ type: ObjectId, ref: 'Post' }]
});

中的‘[]’去掉试试?变成

var UserSchema = new Schema({
    name  : { type: String, unique: true },
    posts : { type: ObjectId, ref: 'Post' }
});


0 回复 有任何疑惑可以回复我~
#1

忧郁的蛋挞 提问者

已经解决了,不是这个问题。感谢回答!
2017-07-08 回复 有任何疑惑可以回复我~
#2

_蜡笔小新_ 回复 忧郁的蛋挞 提问者

嗯嗯,不用,没帮到你。。。请问你怎么解决的呢
2017-07-08 回复 有任何疑惑可以回复我~
#3

忧郁的蛋挞 提问者 回复 _蜡笔小新_

mongodb刚入门,低级错误吧!要使用population必须先在相关字段里存一个_id值,我没有先存一个相关的_id所以没有关联成功。
2017-07-09 回复 有任何疑惑可以回复我~
#4

_蜡笔小新_ 回复 忧郁的蛋挞 提问者

哦对!你也算提醒了我,谢谢!
2017-07-09 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
node建站攻略(二期)——网站升级
  • 参与学习       51940    人
  • 解答问题       408    个

帮助你深入前后端开发留下的迷惑,为进一步自学打下基础

进入课程

mongoose的population数据填充关联不成功

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信