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 }); });