【发布时间】:2015-11-09 23:27:26
【问题描述】:
我正在尝试让猫鼬填充工作。
我有两种型号,一种用于订单,另一种用于订购商品。
我这样做纯粹是为了理解填充。
我确实有两个文件,但我现在将所有内容都放在一个名为 main.js 的文件中
main.js 在项目模型中创建 3 个项目。
然后我尝试使用 3 件商品填充订单模型。
查询的输出现在给出正确的填充结果。
也就是说从行输出
console.log(JSON.stringify(orders, null, "\t");
现在:
[ { "_id": "55d32e4594db780b1bbb4372", “__v”:0, “行”:[ { “价格”:2.4, “数量”:5, "_id": "55d32e4594db780b1bbb436f", “__v”:0 }, { “价格”:3.7, “数量”:7, "_id": "55d32e4594db780b1bbb4370", “__v”:0 }, { “价格”:1.2, “数量”:3, "_id": "55d32e4594db780b1bbb4371", “__v”:0 } ] } ]
但是数据库没有填充。
下面是main.js文件
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/mydb');
var Schema = mongoose.Schema;
var OrderSchema = new Schema({
lines: [{type: mongoose.Schema.Types.ObjectId, ref: 'Item'}]
});
var ItemSchema = new Schema({
price: Number,
quantity: Number
});
var Order = mongoose.model('Order', OrderSchema);
var Item = mongoose.model('Item', ItemSchema);
var itemArray = [
{price: 2.4, quantity: 5},
{price: 3.7, quantity: 7},
{price: 1.2, quantity: 3}
];
Item.create(itemArray, function(err) {
if (err) {
console.log('Error creating items: ', err);
}
var order = new Order();
Item.find({}, {_id: 1}, function(err, result) {
result.forEach(function(obj) {
order.lines.push(obj._id);
});
}).exec().then(function() {
order.save(function(err) {
if (!err) {
Order.find({})
.populate('lines')
.exec(function(err, orders) {
console.log(JSON.stringify(orders, null, "\t")); // output is populated the database is still not populating.
});
}
});
} );
});
【问题讨论】:
-
所以您确实意识到您需要先将商品添加到订单中?
.populate()调用只是将已附加的项目数据作为第一类对象而不是引用拉入。您似乎期望它会以某种方式“神奇地”添加项目。 -
感谢您的回复,布雷克七号您能否更详细地解释一下如何获取我在 main.js 中使用 Item.create 创建的 3 个项目来填充我在 populate.js 中创建的订单跨度>
-
不知道我对此能说得有多清楚。
populate()不会向您的对象添加项目。 mongoose 文档中有非常清晰的示例。 -
感谢您回复我布雷克七。我遇到了一个例子,我在“alexanderzeitler.com/articles/…”找到了作品。我现在也像我期望的那样工作,作为行 console.log(JSON.stringify(orders, null, "\t")) 的输出
-
数据库仍未更新。 Blakes Seven 如果你知道如何修复我的程序,能否请你展示一些代码来证明你在说什么。