如何使用猫鼬以编程方式在节点服务器上仅预加载一次 MongoDB 文档

Posted

技术标签:

【中文标题】如何使用猫鼬以编程方式在节点服务器上仅预加载一次 MongoDB 文档【英文标题】:How to preload MongoDB document only once programatically on node server using mongoose 【发布时间】:2018-06-13 16:03:38 【问题描述】:

如何在node 服务器上使用mongoose MongoDB 中的一些数据preload。 我想在MongoDB 的集合中添加一些默认数据/文档。 创建模式后是否可以在集合中添加数据? 通过语法。

【问题讨论】:

可以,但最好将其作为一个单独的脚本来执行,在需要时显式调用它,而不是在应用程序启动时无论是否需要它都运行 tqueries。 这是一种设计选择,取决于您的应用程序的性质和使用方式,我更喜欢自动运行它,因为我的应用程序在没有一些关键文档的情况下无法运行,而且它更快我的团队就是这样。 【参考方案1】:

在我的项目中,当我的应用程序运行以填充数据库时,我有这段代码来引导我的 mongodb。

const _ = require('lodash');
const mongoose = require('mongoose');

function _bootstrapDbModel(schemaName, schema, collectionName) 
  const model = mongoose.model(schemaName, schema, collectionName);
  // if there is not data in the collection, populate it
  model.count().then((count) => 
    if (count === 0) 
      // load prdefined data
      // which I prepare and named according to my collection name
      const data = require(`../data/$collectionName`);
      model.insertMany(data.documents).then((results) => 
        _.map(results, (result) =>  console.log(`Inserted _id:$result._id into $collectionName`) );
      );
    
  );

这就是我的数据的样子

const ObjectId = require('mongoose').Types.ObjectId;

exports.documents = [
  
    _id: ObjectId('54d19680b51c15260b944fd5'),
    email: 'myemail@company.com',
    ....
  
];

【讨论】:

嗨,谢谢neo,我必须调用这个方法_bootstrapDbModel,否则它会被自动调用。 连接成功后调用。 谢谢 Neo 它帮助我,我会投票请编辑上面的帖子并这样做更改 logger.info(collectionName+' 集合为空。正在加载默认数据...'); const data = require('../data/'+collectionName); logger.info('插入_id:'+result._id +'into '+collectionName);第一个 ` 无效,所以只有它对我不起作用 糟糕,我的错。我从我的项目中复制了这个样本,它有一个全局 logger model.insertMany(data.documents) ,data.documents 表示您的 json 文件的结构为 documents:[ your :data,your :data] 如果您保留json 文件中的数据作为数组只像这样 [ your :data,your :data] 然后只在上面代码中的 model.insertMany(data) 这样的方法中传递数据

以上是关于如何使用猫鼬以编程方式在节点服务器上仅预加载一次 MongoDB 文档的主要内容,如果未能解决你的问题,请参考以下文章

Vue Element.ui 树,发出重新加载事件

如何使用节点异步来获取我的猫鼬电话?

如何在猫鼬聚合中使用字段值? (节点)

如何使用基于关键字的猫鼬在节点中进行搜索

TextViews 在 Android 4 上仅动画一次

如何在节点 js 中为全局变量分配猫鼬结果?