0

我有一个库存应用程序,我想在其中设置有关库存的一些详细信息,然后插入库存的所有项目。我想在两个不同的集合中插入库存详细信息和项目,以便过滤项目。我正在使用 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 呢?

4

1 回答 1

0

通过说“同时”,我认为您需要事务功能,这确实是一RDBMS件事,MongoDB 不支持。如果您的应用程序强烈依赖这些特性,恐怕 MongoDB 不是您的正确选择。

所以回到你的问题,我不明白你为什么要存储stock和存储stock item在 2 个不同的集合中。将它们存储在一个集合中将是更好的选择。更多信息可以参考MongoDB数据模型设计手册。如果只是过滤所有库存项目,聚合框架就是为此目的而设计的。以及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
]);
于 2014-09-19T06:51:01.590 回答