【问题标题】:Creating new collection on every POST request NodeJS + Mongoose在每个 POST 请求 NodeJS + Mongoose 上创建新集合
【发布时间】:2017-01-19 14:00:13
【问题描述】:

如何在 NodeJS express + mongoose based REST API 上为每个 POST 请求创建一个新集合?

有很多教程使用硬编码的相同集合,但找不到允许在每个新 POST 上创建新集合的教程。

例如: model.js

var mongoose = require('mongoose');
var mySchema = new mongoose.Schema({
       //Scehma Here
});
module.exports = mongoose.model('mycollection', mySchema);

server.js

var devices = require('./model');
router.route('/devices')
  .post(function(req, res) {
    var device = new devices();
        device._id = req.body.id;
        device.save(function(err) {
            if (err)
              res.send(err);
            res.json({ message: 'Success!' });
        });
  })

这会在 mycollection 上为每个新的 POST 创建新文档

但是,我需要将创建的每个新对象隔离到一个新集合中。

是否可以在每个 POST 上创建一个具有相同架构和集合名称的新集合 req.body.id

更新:

@chridam 和 @MykolaBorysyuk cmets 的用例

数据将是来自许多 IoT 设备的时间序列数据。

在第一次连接时,设备将使用其ID 像 IMEI 一样发出POST 请求,然后它将每 5 秒连续发送一次数据。 在这里存储类似的东西:http://blog.mongodb.org/post/65517193370/schema-design-for-time-series-data-in-mongodb

我认为为每个设备创建一个新集合是个好主意,如果这是一个糟糕的选择(我是 DevOps 和开发新手),请为上述用例建议我一个更好的方法。这将是 100 台具有连续时间序列数据的设备。

谢谢。

【问题讨论】:

  • 只是好奇,为什么要为每个 HTTP POST 请求创建一个集合?
  • 基本上你可以使用mongoDb驱动。但这是非常糟糕的方法。您可能需要重新思考您的逻辑并找到更好的解决方案。
  • 感谢@MykolaBorysyuk 用用例更新了问题,请建议我更好的方法,因为我是 NodeJS 和 NoSQL 数据库的新手
  • 如果可以的话,只需在 mongo _id = thatDeviceUniqueId 中制作并将该值存储在那里。因此,您将拥有类似 {_id: deviceId, data: [Array of that data that you want..]} 的文档。并且只是在每个更新后的数据数组上

标签: node.js mongodb express mongoose


【解决方案1】:

我认为@MykolaBorysyuk 的建议是有效的,但如果您想使用capped collections 来限制每个设备将保留的文档数量,那么单独的集合是更好的方法。

【讨论】:

    猜你喜欢
    • 2016-05-21
    • 2016-05-15
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多