我在文档中有一个元素数组(它们是子文档(。最初,这个字段只是一个对象,我可以使用它来轻松访问像这样的嵌套对象
fieldName[objectKey]
但这是在意识到可以将模式存储在模式中之前!现在我有了一个这些对象的数组,如果不循环遍历整个数组并查询每个对象,就无法找到其中一个。
以下是MongoDB Compass屏幕截图示例
最初,这个对象是guildId键的一个值,该键现在是模式中的一个字段。理想情况下,如果我能把它从模式中去掉,并把它设置为对象的键,那就太好了!
我发现了如何在MongoDb中使用映射而不是使用数组。这将允许我通过对象的"key!
captchas: {
type: Map,
of: captchaSchema.schema
}
还有另一个选项可能会对您有所帮助。您可以将此guild
嵌入文档存储在另一个集合中。有自己的模式。并且在您的原始模式中只存储guild_id
引用,如以下所示:
value: "MD17",
captchas: [guild_id1, guild_id2, ..., guild_idN]
然后通过这样的查询由聚合框架请求:
your_model_name.aggregate([
{
$match: {
field: value_for_match
}
},
{
$lookup: {
from: "guilds",
localField: "captchas",
foreignField: "_id", //make sure that guild_collection id is safe as reference
as: "guilds"
}
}
]}
甚至在$lookup
阶段后匹配必要的嵌入公会文档