[解決済み] インデックスが作成されない、$textクエリにテキストインデックスが必要 - mongoose
2022-02-11 07:14:35
質問
mongoose: 5.8.9 node: v12.13.0
スキーマにインデックスを作成するように設定した後、mongooseはインデックスを作成しません。新しいドキュメントを作成しても、IDインデックスだけで、新しく作成されたものはありません。については、ドキュメントに書かれているとおりにしていました。 さくせい が、それでもどこを間違えているのかがわからない。
いつ
const ads = await Ad.find({ $text: { $search: "something" } })
エラー
MongoError: text index required for $text query at Connection.<anonymous> (/home/usama/Projects/commercial/adex/node_modules/mongoose/node_modules/mongodb/lib/core/connection/pool.js:466:61) at Connection.emit (events.js:210:5) at Connection.EventEmitter.emit (domain.js:476:20) at processMessage (/home/usama/Projects/commercial/adex/node_modules/mongoose/node_modules/mongodb/lib/core/connection/connection.js:384:10) at Socket.<anonymous> (/home/usama/Projects/commercial/adex/node_modules/mongoose/node_modules/mongodb/lib/core/connection/connection.js:553:15) at Socket.emit (events.js:210:5) at Socket.EventEmitter.emit (domain.js:476:20) at addChunk (_stream_readable.js:308:12) at readableAddChunk (_stream_readable.js:289:11) at Socket.Readable.push (_stream_readable.js:223:10) at TCP.onStreamRead (internal/stream_base_commons.js:182:23) { ok: 0, errmsg: 'text index required for $text query', code: 27, codeName: 'IndexNotFound', name: 'MongoError', [Symbol(mongoErrorContextSymbol)]: {} }
私のスケジュール
import { Schema } from 'mongoose' import mongoosePaginate from 'mongoose-paginate-v2' import Local from '../index' const adSchema = new Schema( { id: Schema.Types.ObjectId, creater: Schema.Types.ObjectId, title: { type: String }, tags: Array, description: { type: String, maxlength: 4500, }, }, { timestamps: true, versionKey: false, autoIndex: false } ) adSchema.index({ title: 'text', description: 'text', tags: 'text' }) adSchema.plugin(mongoosePaginate) const Ad = Local.model('Ad', adSchema) export { Ad as default }
mongo シェルで
> myads.getIndexes() [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "adex.ads" } ]
解決方法は?
下の行です。
adSchema.index({ title: 'text', description: 'text', tags: 'text' })
mongoose のインデックスを正しく定義します。 スキーマ (データベース上ではありません)。デフォルトでは、mongoose はアプリケーションの起動時にインデックスを作成します ( リンク を使うことで、それを防ぐことができます。
autoIndex: false
.そのため、その行を削除するか、あるいは
createIndexes
を明示的にモデル上で実行します。adSchema.index({ title: 'text', description: 'text', tags: 'text' }); const Ad = Local.model('Ad', adSchema); Ad.createIndexes();
関連
-
[解決済み】Discord.js が特定のチャンネルにメッセージを送信する場合
-
[解決済み】 console.logの出力をどこに永久保存するか?
-
[解決済み】ExpressJSとMeteorJSの比較【終了しました
-
[解決済み] AWS lambda function error - Unable to import module 'index': エラー
-
[解決済み] joiライブラリを使用して2つの時間を比較する方法
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] http-server コマンドが見つかりません。
-
[解決済み] ReferenceError: describe は定義されていません NodeJs
-
[解決済み] "app.use(express.cookieSession())" に "secret" オプションが必要です。
-
[解決済み] npm not able to find a fileに関連するエラーは何が原因でしょうか?node_modules サブフォルダ内にコンテンツがありません。なぜでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み】AWS STS AssumeRoleへのアクセスを可能にする方法
-
[解決済み】Nodejsの解決方法:Error: ENOENT: そのようなファイルまたはディレクトリがありません
-
[解決済み】Passport.js - エラー: ユーザーのセッションへのシリアライズに失敗しました。
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] bodyParser は非推奨です express 4
-
[解決済み] EventEmitter のメモリリークの可能性が検出された
-
[解決済み] joiライブラリを使用して2つの時間を比較する方法
-
[解決済み] nodejsでfindAllのソート順を続編にする
-
[解決済み] NodeJsのSequelizeでautoIncrementはどのように動作するのですか?