非常简单的问题,这些问题浪费了我几个小时的时间:我只是尝试将数据推到我的模式中存在的数组,但是当我使用.push
时,我会遇到错误的错误属性推动不确定的'这是我非常简单的代码:
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/new_try1");
var productSchema = new mongoose.Schema({
number: Number,
name: String
});
var Product = mongoose.model("Product", productSchema);
var orderSchema = new mongoose.Schema({
number: Number,
name: String,
products: [productSchema]
});
var Order = mongoose.model("Order", orderSchema);
var newOrder = new Order({
number: "123",
name: "jane"
});
newOrder.save(function (err, order) {
if (err) {
console.log(err);
} else {
console.log(order);
}
});
Order.find({
name: 'jane'
}, function (err, order) {
if (err) {
console.log(err)
} else {
console.log(order);// I can see the products array in cmd
console.log(order.products);// I got undefined here!!!!!????
order.products.push({// here I got error can not read of un....
number:456,
name:'carret'
});
order.save(function(err,found){
if (err){
console.log(err);
}else{
console.log(found);
}
})
}
});
运行服务器时,我在cmd中获得了订单:
[{_id:357636shgs65dh5sd4h65d,
number:'123',
name:'jane',
__v:0,
products:[] }]
现在为什么订单。
使其简单,看起来订单就是这样:
var order=[
{_id:357636shgs65dh5sd4h65d,
number:'123',
name:'jane',
__v:0,
products:[]
}];
您可以看到它的 array 而不是对象。因此,您首先需要获取数组的对象:
order //the array
[0] //the object
.products //the product array
.push()//should work now
collection.find 将光标返回到集合,需要迭代(= arraylike(所以你可能想使用 collection.findone wich仅返回一个元素,使您的代码正常工作。
https://docs.mongodb.com/v3.2/reference/method/db.collection.find/https://docs.mongodb.com/v3.2/reference/method/db.collection.findone/
Order.findOne({
name: 'jane'
}, function (err, order) {
order.push("data");
});
看起来您的订单是一个数组。因此,像这样的事情应该有效:
Order.find({
name: 'jane'
}, function (err, order) {
if (err) {
console.log(err)
} else {
console.log(order);// I can see the products
console.log(order[0].products);
order[0].products.push({
number:456,
name:'carret'
});
order.save(function(err,found){
if (err){
console.log(err);
}else{
console.log(found);
}
})
}
});
注意:我不确定您的用例。但是看来您可以从数据库中退回多个订单,因此您可能想循环循环返回的处理订单