【发布时间】:2012-08-26 10:10:51
【问题描述】:
我已经用 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 驱动程序和 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 不会返回零结果的空响应。相反,它通过等待和等待响应来保持应用程序处于待机状态,并且从不进入回调函数。
有什么想法吗?你有过类似的经历吗?
非常感谢!
【问题讨论】: