我有一个股票申请,我想设置股票的一些细节,然后插入股票的所有项目。我想在两个不同的集合中插入股票详细信息和项目,然后我可以过滤项目。我正在使用MEAN Stack,我已经修改了crud模块以接受一些额外的字段,并且还创建了用于填充items数组的UI。这是我到目前为止所拥有的:
scope.stockItems = [];
$scope.createStockItem = function () {
$scope.stockItems.push(
{
brand: $scope.brand,
style: $scope.style,
amount: $scope.amount
}
);
$scope.brand = false;
$scope.style = false;
$scope.amount = '';
};
// Create new Stock
$scope.create = function() {
// Create new Stock object
var stock = new Stocks ({
name: this.name,
details: this.details,
stockDate: this.stockDate
});
// Redirect after save
stock.$save(function(response) {
$location.path('stocks/' + response._id);
// Clear form fields
$scope.name = '';
}, function(errorResponse) {
$scope.error = errorResponse.data.message;
});
};
股票模型:
var StockSchema = new Schema({
name: {
type: String,
default: '',
required: 'Please fill Stock name',
trim: true
},
details: {
type: String,
default: '',
required: 'Please fill Stock details'
},
stockDate: Date
created: {
type: Date,
default: Date.now
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
和服务器控制器中的方法:
exports.create = function(req, res) {
var stock = new Stock(req.body);
stock.user = req.user;
stock.save(function(err) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.jsonp(stock);
}
});
};
如何发送请求并保存stockItems?
答案 0 :(得分:0)
同时说'我认为你需要事务功能,这实际上是一个RDBMS
的东西,MongoDB不支持。如果您的应用程序非常依赖这些功能,我担心MongoDB不适合您。
回到你的问题,我不明白为什么你必须将stock
和stock item
存储在2个不同的集合中。将它们存储在一个集合中将是更好的选择。有关详细信息,请参阅MongoDB手册的Data Model Design。如果仅过滤所有库存商品,aggregation framework 就是为此目的而设计的。以及Map/Reduce。这里聚合框架更适合您的问题。你会有类似的东西:
db.stock.aggregate([
{$match: {...}}, // same as find criteria. to narrow down data range
{$unwind: "$items"}, // unwind items.
... // probably some other $match to filter the items
]);