MongoDB子文档列表
我有一个关于子文档的问题。假设我有这样一个用户数据库:MongoDB子文档列表,mongodb,mongoose,Mongodb,Mongoose,我有一个关于子文档的问题。假设我有这样一个用户数据库: db.users.insertMany([ { username: "test", projectA: [ { tags: ['1234', '23454'] } ] }, { username: "test2", projectA: [ { tags: ['1dfdfsdf', '234dfdfdf5
db.users.insertMany([
{
username: "test",
projectA: [
{
tags: ['1234', '23454']
}
]
},
{
username: "test2",
projectA: [
{
tags: ['1dfdfsdf', '234dfdfdf54']
}
]
},
]);
在用户文档下面,我有项目的子文档。比方说,其中一个项目被称为“ProjectA”。在这个文档下,我存储了项目的数据,在我的示例中是一些标记
我不需要整个用户模型,因为它可能包含大量数据。我想要的是一个列表,其中包含数据库中User和projectA下的所有标记
我使用NodeJS和mongoose来获取数据。我该怎么做呢?MongoDB和Mongoose没有您想要的内置功能。 查询数据库后,您必须编写自定义代码,以循环返回的文档数组 大概是这样的:
db.users.insertMany([
{
username: "test",
projectA: [
{
tags: ['1234', '23454']
}
]
},
{
username: "test2",
projectA: [
{
tags: ['1dfdfsdf', '234dfdfdf54']
}
]
},
]);
db.collection.find({})
.lean()
.sort({data:1})
.限额(10)
。然后(数据=>{
//在此处使用自定义代码处理数据
for(让index=0;indexconsole.log(err));
在这里,我假设项目字段将始终被称为
ProjectA
,标记字段将始终被称为tags
您可以使用$match
进行筛选,并使用$project
获取数据子集:
db.collection.aggregate([
{ $match: { username: "test" } },
{ $project: {"projectA.tags": 1} }
])
这听起来像是一个真正的性能问题,特别是当我想得到最后10个添加的标签时,我每次都必须检查整个数据库。在MySQL中,它将是一个带有排序和限制的简单查询。或者整个数据库设计应该有所不同?比方说,有不同的项目和用户。用户可以参与不同的项目。我有一个页面,里面有一些关于这个项目的统计数据。比如带标签的列表。设计数据库的最佳方法是什么。我想到的每一种方法都朝着基于表的关系数据库的方向发展。您也可以在MongoDB中进行限制和排序。其他操作符如
$或
和$和
也可用。我建议你看看MongoDB文档。