我有一个用户模型和一个日志模型。日志模型是用户模型的子文档。所以在我的用户模型中我有:
var mongoose = require('mongoose');
var Log = require('../models/log');
var UserSchema = new mongoose.Schema({
username: {
type: String,
unique: true
},
logsHeld: [
Log
]
});
然后在我的' Log'模特我:
var mongoose = require('mongoose');
var logSchema = new mongoose.Schema({
logComment: {
type: String,
},
});
module.exports = mongoose.model('Log', logSchema);
因此,在创建'用户'时,' logsHeld'永远是空的。我想知道如何将子文档添加到此用户模型。
我尝试过这种POST方法:
router.post('/createNewLog', function(req, res) {
var user = new User ({
logssHeld: [{
logComment: req.body.logComment
}]
});
user.save(function(err) {
if(err) {
req.flash('error', 'Log was not added due to error');
return res.redirect('/home');
} else {
req.flash('success', 'Log was successfully added!');
return res.redirect('/home');
}
});
});
但这不起作用。它还包括一个新用户'线路,我认为我不需要,因为这将是现有的用户。
答案 0 :(得分:1)
尝试使用仅引用子文档架构的logSchema
,Log
引用../ models / log
var UserSchema = new mongoose.Schema({
username: {
type: String,
unique: true
},
logsHeld: [
logSchema
]
});
答案 1 :(得分:1)
您需要使用logSchema
而不是Log模型作为User
模型中的子文档架构。您可以按如下方式访问架构:
var mongoose = require('mongoose');
/* access the Log schema via its Model.schema property */
var LogSchema = require('../models/log').schema; // <-- access the schema with this
var UserSchema = new mongoose.Schema({
username: {
type: String,
unique: true
},
logsHeld: [LogSchema]
});
在您面临另一个问题的另一个答案中提取您的评论
WriteError({“code”:11000,“index”:0,“errmsg”:“E11000重复键 错误索引:testDB.users。$ email_1 dup key:
您收到此消息是因为users
集合中已有一个文档,其null
字段的值很可能为email
。即使您的架构未明确指定email
字段,您也可能在users.email
上拥有旧的和未使用的唯一索引。
您可以使用
确认testDB.users.getIndexes()
如果是这种情况,请使用
手动删除不需要的索引testDB.users.dropIndex(<index_name_as_specified_above>)
并继续使用POST来查看是否已纠正错误,我打赌我的0.02美元,users
集合中有一个旧的未使用的唯一索引,这是主要问题。
答案 2 :(得分:0)
尝试push
在mongoose
var user = new User;
user.logssHeld.push({
logComment: req.body.logComment
});
user.save(function(err, doc) {
//DO whatever you want
});
查看文档here