gpt4 book ai didi

node.js - 使用 mongoose 在数组字段的对象中查找匹配项

转载 作者:行者123 更新时间:2023-12-02 04:28:49 24 4
gpt4 key购买 nike

我有这个架构:

var eventSchema = new mongoose.Schema({
name: String,
tags: [{
tagId: mongoose.Schema.Types.ObjectId,
name: String,
description: String
}],
});

var Event = mongoose.model('Event', eventSchema);

还有一组标签id,例如:

var arrayOfTagsIds = [23, 55, 71];
// in this example I'm not using real mongo id's, which are strings

如何使用 mongoose 的 find 来搜索具有任何这些标签的事件?

例如,这个事件应该在结果中,因为它有 tagId 23 和 tagId 55:

{
_id: ...,
name: 'Football tournament',
tags: [{ tagId: 23, name: 'football', description: '' },
{ tagId: 55, name: 'tournament', description: '' }]
}

查找函数中的查询必须如何?

我正在考虑使用:tags.tagId: {$in: arrayOfTagsIds} 但我认为这行不通(使用 tags 听起来不太好.tagId,因为tags是一个数组)

Event
.find({tags.tagId: {$in: arrayOfTagsIds}})
.exec(function (err, events) { ... }

还有,做这种查询太慢了?

最佳答案

是的,您可以在嵌入的子文档和数组的键中使用点符号。但是,您确实需要引用您的 key ,因为它包含一个点:

Event
.find({'tags.tagId': {$in: arrayOfTagsIds}})
.exec(function (err, events) { ... }

要加快此查询,您可以在 'tags.tagId' 上创建索引。

关于node.js - 使用 mongoose 在数组字段的对象中查找匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24874063/

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