Javascript Mongoose未保存嵌入式对象数组
我定义了以下模式:Javascript Mongoose未保存嵌入式对象数组,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我定义了以下模式: var mongoose = require('mongoose'); var VenueSchema = new mongoose.Schema({ name: String, email: String, phone: String, address: {address1: String, address2: String, suburb: String, state: String, postCode: Number, country:
var mongoose = require('mongoose');
var VenueSchema = new mongoose.Schema({
name: String,
email: String,
phone: String,
address: {address1: String, address2: String, suburb: String, state: String, postCode: Number, country: {type: String, default: 'Australia'}},
ABN: String,
website: String,
openingHours: [{order: Number, day: Date, open: String, close: String}],
closedDays: [{startDate: Date, endDate: Date}],
supportEmail: String
});
var Venue = mongoose.model('Venue', VenueSchema);
module.exports = Venue;
我在Express中定义了以下方法来保存文档:
app.post('/api/venues/:id', function (req, res) {
Venue.findOneAndUpdate({_id: req.params.id}, req.body, {upsert: true, new: true}, function (err, venue) {
if (err) {
res.status(500).send(err);
}
else {
res.status(200).json(venue);
}
});
});
问题是,当文档包含openingHours
数组时,生成的保存文档在mongo
控制台中如下所示:
"openingHours" : [
{
"_id" : ObjectId("563be68ce65bf8543c6ec5e0")
}
],
我可以确认,对象正在被传递给Express方法,如req.body.openingHours
具有正确的长度和范围内的对象。显然有些事情正在发生,否则Mongo
将不会填充\u id
文件,但是,我不明白为什么会发生这种情况。我没有为此定义单独的模式,它只是一个嵌入在文档中的对象数组
一定有什么简单的东西我错过了
更新
如果我使用Express
方法将代码更改为以下内容:
Venue.update({_id: req.params.id}, req.body, {multi: true}, function (err, raw) {
if (err) {
res.status(500).send(err);
}
else {
Venue.findById(req.params.id, function(err, venue) {
if (err) {
res.status(500).send(err);
}
else {
res.status(200).json(venue);
}
});
}
});
然后,我的mongo
控制台如下所示:
"openingHours" : [
{
"order" : 0,
"day" : "Monday",
"open" : "10:00",
"close" : "22:00",
"_id" : ObjectId("563bf15ac16e007832e025ae")
},
{
"order" : 1,
"day" : "Tuesday",
"open" : "10:00",
"close" : "22:00",
"_id" : ObjectId("563bf197c16e007832e025af")
},
{
"order" : 2,
"day" : "Wednesday",
"open" : "10:00",
"close" : "22:00",
"_id" : ObjectId("563bf19bc16e007832e025b0")
}
],
现在我不明白两件事:
1.为什么mongo
对数组中嵌入的对象的处理与普通的旧嵌入对象不同?i、 e.保存或更新时,嵌入的地址
对象没有分配给它的\u id
字段。
2.为什么
findOneAndUpdate
的行为如此不同?是因为{multi:true}
?hi@sandora,你找到了解决方法吗?我也在为同样的问题挣扎。