Mar*_*rat 4 routes mongoose node.js
你能解释一下如何组织mongoose模型来创建一对多的连接吗?需要保留单独的集合.
假设我有商店和商品
//store.js
var mongoose = require('mongoose');
module.exports = mongoose.model('Store', {
name : String,
itemsinstore: [ String]
});
Run Code Online (Sandbox Code Playgroud)
//item.js
var mongoose = require('mongoose');
module.exports = mongoose.model('Item', {
name : String,
storeforitem: [String]
});
Run Code Online (Sandbox Code Playgroud)
我是以正确的方式做到的吗?
以及如何访问传递数据到arryas?这是代码输入项目的名称.但是如何输入id到id的数组(itemsinstore)?
app.post('/api/stores', function(req, res) {
Store.create({
name: req.body.name,
}, function(err, store) {
if (err)
res.send(err);
});
})
Run Code Online (Sandbox Code Playgroud)
Fes*_*sto 17
您应该使用模型参考和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);
Run Code Online (Sandbox Code Playgroud)
将新项目保存到现有商店:
var item = new Item({name: 'Foo'});
item.save(function(err) {
store.itemsInStore.push(item);
store.save(function(err) {
// todo
});
});
Run Code Online (Sandbox Code Playgroud)
从商店获取商品
Store
.find({}) // all
.populate('itemsInStore')
.exec(function (err, stores) {
if (err) return handleError(err);
// Stores with items
});
Run Code Online (Sandbox Code Playgroud)
Ren*_*lho 11
您可以使用Virtuals的最佳实践。
Store.js
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const StoreSchema = new Schema({
name: {
type: String,
required: true
},
createdAt: {
type: Date,
default: Date.now
}
})
StoreSchema.virtual('items', {
ref: 'Item',
localField: '_id',
foreignField: 'storeId',
justOne: false // set true for one-to-one relationship
})
module.exports = mongoose.model('Store', StoreSchema)
Run Code Online (Sandbox Code Playgroud)
Item.js
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const ItemSchema = new Schema({
storeId: {
type: Schema.Types.ObjectId,
required: true
},
name: {
type: String,
required: true
},
createdAt: {
type: Date,
default: Date.now
}
})
module.exports = mongoose.model('Item', ItemSchema)
Run Code Online (Sandbox Code Playgroud)
StoreController.js
const Store = require('Store.js')
module.exports.getStore = (req, res) => {
const query = Store.findById(req.params.id).populate('items')
query.exec((err, store) => {
return res.status(200).json({ store, items: store.items })
})
}
Run Code Online (Sandbox Code Playgroud)
请记住,toJSON()默认情况下,虚拟机不包含在输出中。如果你想使用依赖于函数时填入虚函数展现出来JSON.stringify(),就像快车res.json() 功能,设置virtuals: true你的架构的选择toJSON方案。
// Set `virtuals: true` so `res.json()` works
const StoreSchema = new Schema({
name: String
}, { toJSON: { virtuals: true } });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15906 次 |
| 最近记录: |