当前位置: 首页 > 知识库问答 >
问题:

嵌入式文档的Mongoose查询

唐默
2023-03-14

我用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.我发布的模式有问题。

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.
db.news.find({ 'content.link': /test/, lang: 'en' })

多谢!

共有1个答案

洪研
2023-03-14

已解决

这是Mongoose的查询性能错误。我有一个测试集合,其中有大约100k个文档,对这些文档执行查询,我还没有定义一个带有'lang'和'content.link'的复合索引。查询延迟太多,Mongoose或MongoDB没有提醒任何超时警告或错误消息。定义复合索引后,查询正常工作。然而...

>

  • 查询正常工作,在MongoDB shell中执行它们。我不知道为什么猫鼬这么慢。也许所涉及的序列化-反序列化-验证过程会产生延迟。

  •  类似资料:
    • 问题内容: 在Mongoose文档中的以下地址:http : //mongoosejs.com/docs/embedded- documents.html 有一条声明: DocumentArrays具有一个特殊的方法ID,该ID通过其_id属性(每个嵌入式文档获取一个)来过滤嵌入式文档: 考虑以下代码段: 我的问题是: 文档是否正确?如果是这样,那么我如何找出“ my_id”是什么(在示例中),以

    • 我很好奇在我的主模式中使用子文档和更深层文档的利弊: 或者 我目前到处都在使用subdocs,但我主要想知道我可能遇到的性能或查询问题。

    • 问题内容: 我使用Mongoose.js,无法解决3级层次结构文档的问题。 有2种方法可以做到。 首先 -没有裁判。 我需要出示C记录。仅知道_id的C,如何填充/找到它? 我曾尝试使用: 但是我不知道如何从returnet得到一个对象,我只需要c对象。 其次,如果使用裁判: 如何填充所有B,C记录以获取层次结构? 我试图使用这样的东西: 但是它将为single_c.title返回undefine

    • 您可以在Perl模块和脚本中嵌入Pod(Plain Old Text)文档。 以下是在Perl代码中使用嵌入式文档的规则 - 使用空行开始您的文档,在开头使用a = head1命令,然后使用= cut结束它 Perl将忽略您在代码中输入的Pod文本。 以下是在Perl代码中使用嵌入式文档的简单示例 - #!/usr/bin/perl print "Hello, World\n"; =head1 H

    • 我刚开始使用Spring data mongob,但我只是被卡住了,如何使用mongo存储库编写基于json的嵌入式文档查询。 我的数据库看起来像 我想更新基于顶级文档id的子类型,我必须更新具有id 5565ad670cf25cbd975ab2d2的子类型的首选项,如何为此编写查询?