mongoose一对多
你能解释我如何组织mongoose模型创build一对多的连接? 需要分开收集。
假设我有商店和物品
//store.js
var mongoose = require('mongoose'); module.exports = mongoose.model('Store', { name : String, itemsinstore: [ String] });
//item.js
var mongoose = require('mongoose'); module.exports = mongoose.model('Item', { name : String, storeforitem: [String] });
我以正确的方式做了吗?
以及如何访问传递数据到Arryas? 这里是代码哟input名称的项目。 但是如何inputid到id的数组(itemsinstore)呢?
app.post('/api/stores', function(req, res) { Store.create({ name: req.body.name, }, function(err, store) { if (err) res.send(err); }); })
您应该使用模型引用和populate()
方法: http : //mongoosejs.com/docs/populate.html
定义你的模型:
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var storeSchema = Schema({ name : String, itemsInStore: [{ type: Schema.Types.ObjectId, ref: 'Item' }] }); var Store = mongoose.model('Store', storeSchema); var itemSchema = Schema({ name : String, storeForItem: [{ type: Schema.Types.ObjectId, ref: 'Store' }] }); var Item = mongoose.model('Item', itemSchema);
将新项目保存到现有商店中:
var item = new Item({name: 'Foo'}); item.save(function(err) { store.itemsInStore.push(item); store.save(function(err) { // todo }); });
从商店获取物品
Store .find({}) // all .populate('itemsInStore') .exec(function (err, stores) { if (err) return handleError(err); // Stores with items });
好吧,这是你如何定义依赖:
var mongoose = require('mongoose'); module.exports = mongoose.model('Todo', { name : String, itemsinstore: [{ type: Schema.Types.ObjectId, ref: 'Item' }] });
并确保你有不同的名字:
var mongoose = require('mongoose'); module.exports = mongoose.model('Item', { name : String, storeforitem: [String] });
在这两种情况下都要留意Item
。
然后你只是想传递ObjectID的数组。 在这里看到更多: http : //mongoosejs.com/docs/populate.html
尝试这个:
Store.findOne({_id:'5892b603986f7a419c1add07'}) .exec (function(err, store){ if(err) return res.send(err); var item = new Item({name: 'Foo'}); item.save(function(err) { store.itemsInStore.push(item); store.save(function(err) { // todo }); });