Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB子文档列表_Mongodb_Mongoose - Fatal编程技术网

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文档。