Javascript mongodb保存在嵌套对象(node.js)应用程序中
我从代码中得到“找不到bookid”。 我可以使用postman分别添加作者和标题,但我似乎无法使ReviewCreate功能正常工作,我是否遗漏了什么?请帮忙 我的模式Javascript mongodb保存在嵌套对象(node.js)应用程序中,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我从代码中得到“找不到bookid”。 我可以使用postman分别添加作者和标题,但我似乎无法使ReviewCreate功能正常工作,我是否遗漏了什么?请帮忙 我的模式 var mongoose = require('mongoose'); var reviewSchema = new mongoose.Schema({ author: { type: String, required: true
var mongoose = require('mongoose');
var reviewSchema = new mongoose.Schema({
author: {
type: String,
required: true
},
rating: {
type: Number,
required: true,
min: 0,
max: 5
},
reviewText: { type: String, required: true },
createdOn: {
type: Date,
"default": Date.now
}
});
var titleSchema = new mongoose.Schema({
title: {
type: String,
required: true
},
favouredBy: {
type:[String],
required: false
},
reviews: [reviewSchema]
});
var bookSchema = new mongoose.Schema({
bookAuthor: {
type: String,
required: true
},
titles: [titleSchema]
});
mongoose.model('Book', bookSchema);
这就是我用你的推荐信得到的 错误: TypeError:无法读取未定义的属性“push” 当我把控制台。日志(书);就在doAddrivew函数下面
{ _id: 58dd21c3cb77090b930b6063,
titles:
[ { title: 'this is title',
_id: 58dd3f2701cc081056135dae,
reviews: [],
favouredBy: [Object] },
{ title: 'this is the second tittle',
_id: 58dd42a59f12f110d1756f08,
reviews: [],
favouredBy: [Object] } ]
}
您的图书模式具有
标题
属性,该属性还具有评论
做
▼ 更新▼
书
应该是您的书
模型的一个实例bookSchema
中定义的titles
属性是一个数组,因此当您想在bookSchema
中添加数据时,bookAuthor
属性将只有一个字符串,但是titles
字段将包含像[{},{},{}]
这样的对象,因此,您必须选择标题
的索引,如标题[0]
或标题[1]
,然后点击要查看的标题
[reviewSchema]
的reviews
也是一个数组,您可以使用索引并从该数组中选择所需元素,以执行更新、删除等操作,如book.titles[0]。reviews[1]
假设我想输入titles
array第一个元素
book.titles[0].reviews.push({
author: author,
rating: req.query.rating,
reviewText: req.query.reviewText
});
在这里,由于
标题中有两个对象
,因此必须选择要推入的对象
如果要在\u id:58dd3f2701cc081056135dae的第一个对象中推送评论,
,请选择标题[0]
对于\u id:58dd42a59f12f110d1756f08
,标题[1]
由于您的数组将有多个对象,因此您必须匹配要在其中执行操作(如update
)的对象,以便使用$
位置运算符筛选文档
请也看看点符号
您的图书架构没有reviews属性。我这样做了,但我发现此错误无法读取未定义的{{id:58dd21c3cb77090b930b6063,标题:[{标题:'这是标题',{id:58dd3f2701cc081056135dae,评论:[],收藏夹:[对象]},{title:'这是第二个书名',_id:58dd42a59f12f110d1756f08,评论:[],喜欢者:[Object]}}}我想把评论推到这本书的第一个书名。
{ _id: 58dd21c3cb77090b930b6063,
titles:
[ { title: 'this is title',
_id: 58dd3f2701cc081056135dae,
reviews: [],
favouredBy: [Object] },
{ title: 'this is the second tittle',
_id: 58dd42a59f12f110d1756f08,
reviews: [],
favouredBy: [Object] } ]
}
var doAddReview = function(req, res, book, author) {
if (!book) {
sendJSONresponse(res, 404, "bookid not found");
} else {
/* book.titles.reviews.push({
author: author,
rating: req.query.rating,
reviewText: req.query.reviewText
}); */
book.titles[0].reviews.push({ // to push in first element
author: author,
rating: req.query.rating,
reviewText: req.query.reviewText
});
book.save(function(err, book) {
var thisReview;
if (err) {
sendJSONresponse(res, 400, err);
} else {
updateAverageRating(book._id);
// -----------------------------
thisReview = book.reviews[book.reviews.length - 1];
// thisReview = book.titles.reviews[book.titles.reviews.length - 1];
// here also you may have to modify
sendJSONresponse(res, 201, thisReview);
}
});
}
}
book.titles[0].reviews.push({
author: author,
rating: req.query.rating,
reviewText: req.query.reviewText
});
{ _id: 58dd21c3cb77090b930b6063,
titles:
[ { title: 'this is title',
_id: 58dd3f2701cc081056135dae,
reviews: [],
favouredBy: [Object] },
{ title: 'this is the second tittle',
_id: 58dd42a59f12f110d1756f08,
reviews: [],
favouredBy: [Object] } ]
}