我用 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);
查询没有响应并且它永远不会进入回调函数。这很奇怪,因为这种类型的查询(搜索两个字符串字段)在我定义的另一个模式中工作得很好,但在这个模式中不行。另一种Schema更简单,没有任何嵌入文档。
奇怪的是,以下工作:
NewsModel.find({'lang':'en', 'formatted':true}).exec(callback);
是否有任何架构错误?知道我做错了什么吗?
非常感谢你,
路易斯·卡帕。
[更新]
我试过你的建议,但没有办法。我认为只有两种选择:
1.我贴的Schema有问题。
2. Mongoose 在查询嵌入复杂参数的文档时遇到问题,例如另一个文档。
我使用过 MongoDB shell、MongoDB Java Driver 和 Spring MongoDB Data,这是我第一次遇到这种奇怪的行为。
我测试过的查询是:
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 shell 完美配合的示例:
db.news.find({ 'content.link': /test/, lang: 'en' })
我担心 Mongoose 不会返回零结果的空响应。相反,它通过等待和等待响应来保持应用程序处于待机状态,并且永远不会进入回调函数。
有任何想法吗?你经历过类似的事情吗?
非常感谢!