我目前正在尝试为包含文档引用的架构创建.post函数。但是,我不确定如何从另一个集合中检索文档引用的ObjectID。
Board.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var BoardSchema = new Schema({
boardname: String,
userid: {type: Schema.ObjectId, ref: 'UserSchema'}
});
module.exports = mongoose.model('Board', BoardSchema);
user.js的
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
username: String
});
module.exports = mongoose.model('User', UserSchema);
routes.js
router.route('/boards')
.get(function(req, res) {
Board.find(function(err, boards) {
if(err)
res.send(err);
res.json(boards);
});
})
.post(function(req, res) {
var board = new Board();
board.boardname = req.body.boardname;
User.find({username: req.body.username}, function(err, user) {
if(err)
res.send(err);
board.userid = user._id;
});
board.save(function(err) {
if(err)
res.send(err);
res.json({message: 'New Board created'});
});
});
要创建电路板,我在请求中包含电路板名称和用户名。使用用户名,我执行User.find查找特定用户并将其分配给board.userid。但是,这似乎不起作用,因为board.userid不会出现。
非常感谢任何帮助!
谢谢!
修改
对所需内容的更好解释是我有一个现有的User集合。当我想向Board添加一个新文档时,我会提供一个用户名,我将从中搜索User集合,获取特定用户的ObjectId并将其作为userid添加到Board文档中。
答案 0 :(得分:0)
<击> 我相信你正在寻找population
MongoDB中没有连接,但有时我们仍然需要引用 到其他馆藏的文件。这就是人口涌入的地方。
尝试这样的事情:
//small change to Board Schema
var BoardSchema = new Schema({
boardname: String,
user: {type: Schema.ObjectId, ref: 'User'}
});
//using populate
Board.findOne({ boardName: "someBoardName" })
.populate('user') // <--
.exec(function (err, board) {
if (err) ..
console.log('The user is %s', board.user._id);
// prints "The user id is <some id>"
})
击> <击> 撞击>
抱歉,我之前解决了另一个问题。你可能想要使用我在某些时候提供的prevoius解决方案,所以我就离开了。
<强>回调强>
用户标识不在电路板文档上的原因是User.find
是异步的,并且在调用board.save(...)
时未分配。res.send(...)
这应该可以解决问题:
(另外,我添加了几个返回以防止在.post(function(req, res) {
var board = new Board();
board.boardname = req.body.boardname;
User.find({username: req.body.username}, function(err, user) {
if(err)
return res.send(err); //<-- note the return here!
board.userid = user._id;
board.save(function(err) {
if(err)
return res.send(err); //<-- note the return here!
res.json({message: 'New Board created'});
});
});
});
)
{{1}}