【问题标题】:Insert data into MongoDB into custom collections based on input using node.js and mongoose使用 node.js 和 mongoose 根据输入将数据插入 MongoDB 到自定义集合中
【发布时间】:2019-11-22 17:37:23
【问题描述】:

我想根据输入将文档插入到 MongoDB 集合中。 例如如果nid = 1,那么我想将文档插入集合'One',如果nid = 2,那么我想将文档插入集合'Two'等等。

我将使用的架构

{
    nid: Number,
    name: String
}

我尝试在 node.js 中初始化架构,将集合名称定义为具有基于输入的值的变量。

var collVar = 'One';

var newSchema = new mongoose.Schema({
    nid: Number,
    name: String
},{collection: collVar});

但是,每次有新的新数据要插入 MongoDB 时,都无法定义架构。 有没有办法在不定义新架构的情况下根据输入的输入数据将数据插入到不同的集合中?

【问题讨论】:

  • 我发现的一种方法是从定义的模式为每个插入创建一个新模型,其中集合名称取自输入并添加到模型创建语句中。像 var collName = 'One' var newModelSchema = mongoose.model('newModelSchema', collName, newSchema);只是想知道一个更好的解决方案。

标签: node.js mongodb mongoose collections


【解决方案1】:

您可以将 nid 保存为数字并使用 getter (https://mongoosejs.com/docs/tutorials/getters-setters.html) 将其转换为字符串。

例子

const newSchema = new Schema({
  nid: {
    type: Number,
    get: toComprehensiveString
  }
});

function toComprehensiveString(nid) {
 if (nid === 1) {
   return 'One';
 }
 // or use a library / map here
}

我认为这是最好的方法

【讨论】:

  • 只有在 nid = 1 时才将“一”存储到 MongoDB 中。但是,我想将 nid = 1 存储到 MongoDB 中,但将其存储到数据库中名为“一”的集合中。另一种情况,如果 nid = 2,那么我想将 nid 作为 2 存储到数据库中,但将其存储在名为“Two”的集合中。我将有 9 个预定义的集合,从“一”到“九”,我可以使用您描述的 getter 函数。但我的另一个问题是如何根据 nid 字段的值将数据存储到自定义集合中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 2022-01-04
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
相关资源
最近更新 更多