如何在另一个集合中插入具有字段引用文档的文档
How to inserting a document with field referencing document in another collection
我目前正在尝试为具有文档引用的模式创建一个.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'});
});
});
为了创建董事会,我在请求中包含了boardname和用户名。使用用户名,我做了一个User。Find查找特定的用户并将其分配给board.userid。然而,这似乎并没有作为董事会工作。Userid未出现
任何帮助都将非常感激!
谢谢!
编辑一个更好的解释是,我有一个现有的User集合。当我想向Board添加一个新文档时,我将提供一个用户名,从中搜索User集合,获得特定用户的ObjectId并将其作为userid添加到Board文档。
我相信你正在寻找人口
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>"
})
对不起,我之前解决了一个不同的问题。在某些情况下,您可能需要使用我提供的先前的解决方案,因此我将保留它。
回调 userid不在board文档上的原因是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'});
});
});
});
相关文章:
- 如何在新的Meteor Collection文档中设置服务器上的created_on字段
- 循环访问文档 (validate_doc_update) 中的 CouchDB 字段
- findAndModify,如何对文档进行操作's数组搜索对象并更改字段值
- 将文档的MongoDB字段合并到一个文档中
- 如何在一个字段中只提取6个值为true的文档
- 可编辑文档中多个字段的本地存储
- 查找包含子对象MongoDb和Node.js的特定字段的文档
- Mongoose创建一个文档,如果找不到指定的字段,则更新文档中的数组
- 仅返回嵌入文档列表中的某些字段
- 在MongoDB和Node.js中查找某个字段具有与对象完全相同元素的文档
- 将多个文档中的字段保存到对象
- 在响应之前向文档添加其他字段
- 如何从MongoDB中选择所有文档,其中一个字段不等于某个值
- MongoDB:按日历周和年聚合文档,并计算一个字段的所有值的总量
- 在MongoDB中,从文档中获取单个字段数组的最简单方法是什么
- 来自 JavaScript 网站的推文输入字段
- CouchDB:访问_design视图或提取文档字段的替代方法是什么
- 为couchdb更新nodejs的nano模块中的文档字段
- 如何$inc MongoDB文档字段与AJAX
- Mongodb /meteor收集检查子文档字段是否存在,当字段是一个变量