gpt4 book ai didi

node.js - Mongoose 查询嵌入文档

转载 作者:可可西里 更新时间:2023-11-01 09:46:11 25 4
gpt4 key购买 nike

我用 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);

查询没有响应,也没有进入回调函数。这很奇怪,因为这种类型的查询(搜索两个字符串字段)适用于我定义的另一个模式,但不适用于这个。另一种模式更简单,没有任何嵌入文档。

奇怪的是下面的工作:

NewsModel.find({'lang':'en', 'formatted':true}).exec(callback);

是否有架构错误?知道我哪里做错了吗?

非常感谢,

路易斯·卡帕。


[更新]

我尝试了你的建议,但没有办法。我认为只有两个选择:

1. 我发布的 Schema 有问题。

2. Mongoose 在查询嵌入复杂参数的文档(例如另一个文档)时会遇到问题。

我使用过 MongoDB shell、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 shell 完美配合的示例:

db.news.find({ 'content.link': /test/, lang: 'en' })

我担心 Mongoose 不会返回结果为零的空响应。相反,它通过等待和等待响应来保持应用程序处于待命状态,并且从不进入回调函数。

有什么想法吗?你有过类似的经历吗?

非常感谢!

最佳答案

已解决

这是 Mongoose 的查询性能错误。我有一个包含大约 100K 个文档的测试集合,可以对其执行查询,但我还没有用“lang”和“content.link”定义复合索引。查询延迟太多,Mongoose 或 MongoDB 没有发出任何超时警告或错误消息。定义复合索引后,查询工作正常。然而……

  1. 查询在 MongoDB shell 中运行正常。我不知道为什么 Mongoose 这么慢。可能涉及的序列化 - 反序列化 - 验证过程产生了这种延迟。

  2. 即使没有定义任何索引,我也不敢相信对于一个只有 100K 文档的简单测试集合,这个简单的查询会有如此糟糕的性能。 MongoDB 本身会消耗大量资源来快速处理查询和响应。老实说,我对 MongoDB - Mongoose 的期望更高。

我的建议/忠告:

注意索引配置。

如果您想快速搜索,请查看任何 Node.js Apache Solr 模块。

关于node.js - Mongoose 查询嵌入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12217930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com