Mongoose で次のスキーマを定義しました。
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.Types.ObjectId;
var New = new Schema({
_id: ObjectId,
lang: String,
formatted: Boolean,
downloaded: Date,
content: {
title: String,
link: String,
description: String,
meta: String,
author: String
}
});
module.exports = New;
そして、次のクエリを実行しようとしています。
NewsModel.find({'lang':'en', 'content.link':'test'}).exec(callback);
クエリは応答せず、コールバック関数に入りません。このタイプのクエリ (2 つの文字列フィールドへの検索) は、私が定義した別のスキーマではうまく機能しますが、このスキーマでは機能しないため、奇妙なことです。他のスキーマは、ドキュメントが埋め込まれていないため、より単純です。
奇妙なことに、次のように動作します。
NewsModel.find({'lang':'en', 'formatted':true}).exec(callback);
スキーマエラーはありますか? 私が間違っていることは何ですか?
どうもありがとうございました、
ルイス・カッパ
[更新しました]
私はあなたの提案を試みましたが、方法はありません。次の 2 つのオプションしかないと思います。
1.投稿したスキーマに問題があります。
2. Mongoose には、別のドキュメントなどの複雑なパラメータが埋め込まれたドキュメントへのクエリに問題があります。
私は MongoDB シェル、MongoDB Java ドライバー、および Spring MongoDB データを使用してきましたが、この奇妙な動作を経験したのはこれが初めてです。
私がテストしたクエリは次のとおりです。
NewsModel.find({'lang':'en', 'content.link':'test'}).exec(callback);
NewsModel.find({'lang':'en'}).where('content.link').equals('test').exec(callback);
NewsModel.find({'content.link':'test'}).where('lang').equals('en').exec(callback);
NewsModel.find({'content.link':'test'}).exec(callback); // That demonstrates that Mongoose has problems with subelements.
NewsModel.find().where('content.link').equals('test').exec(callback); // This one too.
そして、MongoDB シェルで完全に動作する 1 つの例:
db.news.find({ 'content.link': /test/, lang: 'en' })
私は、Mongoose がゼロの結果で空の応答を返さないことを心配しています。代わりに、待機して応答を待機することでアプリケーションを待機状態に維持し、コールバック関数には決して入りません。
何か案は?似たようなことを経験しましたか?
どうもありがとう!