我试图将一个非常大的文本保存到我的 mongodb 数据库中,但它崩溃了。我正在尝试构建一个片段管理器,这是我的错误代码:
{ [MongoError: Btree::insert: key too large to index, failing beverages.recipes.$code_1 3271 { : "var gulp = require('gulp');
var source = require('vinyl-source-stream');
var browserify = require('browserify');
var browserSync = require('browser-sy..." }]
name: 'MongoError',
message: 'Btree::insert: key too large to index, failing beverages.recipes.$code_1 3271 { : "var gulp = require(\'gulp\');\nvar source = require(\'vinyl-source-stream\');\nvar browserify = require(\'browserify\');\nvar browserSync = require(\'browser-sy..." }',
driver: true,
code: 17280,
index: 0,
errmsg: 'Btree::insert: key too large to index, failing beverages.recipes.$code_1 3271 { : "var gulp = require(\'gulp\');\nvar source = require(\'vinyl-source-stream\');\nvar browserify = require(\'browserify\');\nvar browserSync = require(\'browser-sy..." }',
getOperation: [Function],
toJSON: [Function],
toString: [Function] }
这是我的 Mongoose 模型。
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
let recipeSchema = new Schema({
title: { type: String, required: true },
author: { type: String},
tags: { type: String, required: true },
code: { type: String, required: true, unique: true, index: true },
created_at: Date,
updated_at: Date
});
recipeSchema.pre('save', function(next) {
var recipe = this;
// get the current date
var currentDate = new Date();
// change the updated_at field to current date
recipe.updated_at = currentDate;
// if created_at doesn't exist, add to that field
if (!recipe.created_at){
recipe.created_at = currentDate;
}
next();
});
let Recipe = mongoose.model('Recipe', recipeSchema);
export default Recipe;
如果found this on mongodb ,但我不知道如何将它与 Mongoose 一起使用。这是正确的做法吗?
这是我尝试保存的文档
{ title: 'test',
tags: 'test',
code: 'var gulp = require(\'gulp\');\nvar source = require(\'vinyl-source-stream\');\nvar browserify = require(\'browserify\');\nvar browserSync = require(\'browser-sync\');\nvar nodemon = require(\'gulp-nodemon\');\nvar babelify = require(\'babelify\');\nvar eslint = require(\'gulp-eslint\');\nvar buffer = require(\'vinyl-buffer\');\nvar uglify = require(\'gulp-uglify\');\nvar sourcemaps = require(\'gulp-sourcemaps\');\nvar sass = require(\'gulp-ruby-sass\');\nvar config = require(\'./config\');\nvar imageop = require(\'gulp-image-optimization\');\nvar concat = require(\'gulp-concat\');\n\ngulp.task(\'images\', function(cb) {\n gulp.src(\'./src/assets/images/**/*\')\n .pipe( imageop({\n optimizationLevel: 5,\n progressive: true,\n interlaced: true\n }))\n .pipe(gulp.dest(\'./public/images/\'));\n});\n\n\ngulp.task(\'browser-sync\', [\'nodemon\'], function() {\n browserSync({\n files: [\'public/**/*.*\'],\n proxy: "localhost:" + config.APP_PORT, // local node app address\n port: 5000, // use *different* port than above\n notify: true,\n browser: "google chrome",\n });\n});\n\ngulp.task(\'nodemon\', function(cb) {\n var called = false;\n return nodemon({\n script: \'./index.js\',\n ignore: [\n \'gulpfile.js\',\n \'node_modules/\',\n \'public/,\'\n ]\n })\n .on(\'start\', function () {\n if (!called) {\n called = true;\n cb();\n }\n })\n .on(\'restart\', function () {\n setTimeout(function () {\n browserSync.reload({ stream: false });\n }, 200);\n });\n});\n\n\ngulp.task(\'browserify\', function () {\n return browserify({entries: \'./src/client/app.js\', extensions: [\'.js\'], debug: true})\n .transform(babelify)\n .bundle()\n .pipe(source(\'app.min.js\'))\n .pipe(buffer())\n .pipe(sourcemaps.init({loadMaps: true}))\n // Add transformation tasks to the pipeline here.\n .pipe(uglify())\n .pipe(sourcemaps.write(\'./\'))\n .pipe(gulp.dest(\'./public/js\'));\n});\n\ngulp.task(\'lint\', function (cb) {\n return gulp.src([\'./src/**/*.js\'])\n .pipe(eslint())\n .pipe(eslint.format())\n .pipe(eslint.failOnError());\n});\n\ngulp.task(\'sass\', function () {\n return sass(\'./src/assets/sass/style.sass\', { sourcemap: true, style: \'compressed\' })\n .on(\'error\', sass.logError)\n .pipe(sourcemaps.write(\'./\', {\n includeContent: false,\n sourceRoot: \'source\'\n }))\n .pipe(gulp.dest(\'./public/css/\'));\n});\n\ngulp.task(\'scripts\', function(){\n return gulp.src([\'./src/assets/js/bootstrap.min.js\',\'./src/assets/js/checkbox.js\',\'./src/assets/js/radio.js\',\'./src/assets/js/bootstrap-switch.js\',\'./src/assets/js/toolbar.js\',\'./src/assets/js/application.js\'])\n .pipe(sourcemaps.init())\n .pipe(concat(\'assets.min.js\'))\n .pipe(gulp.dest(\'./public/js/\'))\n .pipe(uglify())\n .pipe(sourcemaps.write(\'./\'))\n .pipe(gulp.dest(\'./public/js/\'));\n});\n\ngulp.task(\'fonts\', function() {\n return gulp.src(\'./src/assets/fonts/**/*\').pipe(gulp.dest(\'./public/fonts/\'));\n});\n\ngulp.task(\'watch\', function() {\n gulp.watch([\'./src/**/*.js\'], [\'lint\', \'browserify\', \'scripts\', browserSync.reload]);\n gulp.watch([\'./src/assets/sass/**/*.sass\'], [\'sass\', browserSync.reload]);\n});\n\ngulp.task(\'serve\', [\'browser-sync\', \'watch\']);\n\ngulp.task(\'default\', [\'browserify\', \'nodemon\', \'sass\', \'scripts\', \'fonts\', \'images\', \'watch\']);' }
非常感谢您的帮助!
最佳答案
看起来您正在尝试使用字段 code 作为您的索引。根据您的链接,code 值的大小为 ~3KB。 Mongo 有一个限制 index fields must not exceed 1KB . 3 > 1 因此您收到此错误。
您可以通过以下任一方法解决此问题:
code 字段上建立索引关于javascript - Mongoose 不会保存大文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33767964/
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我有一个ActiveRecord对象,我想在不对模型进行永久验证的情况下阻止它被保存。您过去可以使用errors.add执行类似的操作,但它看起来不再有效了。user=User.lastuser.errors.add:name,"namedoesn'trhymewithorange"user.valid?#=>trueuser.save#=>true或user=User.lastuser.errors.add:base,"myuniqueerror"user.valid?#=>trueuser.save#=>true如何在不修改用户对象模型的情况下防止将用户对象保存在Rails3.2中
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.
是否可以为单个ActiveRecord实例添加回调?作为进一步的限制,这是继续使用库,所以我无法控制该类(除了对其进行猴子修补)。这或多或少是我想做的:defdo_something_creazymessage=Message.newmessage.on_save_call:do_even_more_crazy_stuffenddefdo_even_more_crazy_stuff(message)puts"Message#{message}hasbeensaved!Hallelujah!"end 最佳答案 你可以通过在创建对象后立
这就是我做的a="%span.rockets#diamonds.ribbons.forever"a=a.match(/(^\%\w+)([\.|\#]\w+)+/)putsa.inspect这是我得到的#这就是我想要的#帮助?我尝试过但失败了:( 最佳答案 通常,您不能获得任意数量的捕获组,但如果您使用扫描,您可以为您想要捕获的每个标记获得一个匹配:a="%span.rockets#diamonds.ribbons.forever"a=a.scan(/^%\w+|\G[.|#]\w+/)putsa.inspect["%span","
这会导致Ruby出现内存问题吗?我知道如果大小超过10KB,Open-URI会写入TempFile。但是HTTParty会在写入TempFile之前尝试将整个PDF保存到内存吗?src=Tempfile.new("file.pdf")src.binmodesrc.writeHTTParty.get("large_file.pdf").parsed_response 最佳答案 您可以使用Net::HTTP。参见thedocumentation(特别是标题为“流媒体响应机构”的部分)。这是文档中的示例:uri=URI('http://e