【发布时间】: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