如何给MongoDB数组中的元素一个密钥?Node.js



我在文档中有一个元素数组(它们是子文档(。最初,这个字段只是一个对象,我可以使用它来轻松访问像这样的嵌套对象

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阶段后匹配必要的嵌入公会文档

最新更新