node.js获取mongodb中数组子文档中的一个元素

node.js获取mongodb中数组子文档中的一个元素,第1张

nodejs获取mongodb中数组子文档中的一个元素可以考虑使用聚合函数来实现。

参考代码:

{$match:{'duid':15}},

{$project:{duid:1,"default":1}},

{$unwind:"$defaultstyles"},

{$match:{'defaultstylesstatus':1}},

{$group:{_id:"$_id","defaults":{$push:"$defaultstyles"}}}

MongoDB 将数据记录存储为 BSON类型的 文档(document)。 BSON 是一种二进制数据类型,是json 的一种扩展, bson 支持了更多的数据类型。 下图就是一个document(文档) 示例:

document 的数据结构如下所示:由若干个字段-值对组成,其中字段的值可以是任何 BSON 数据类型 ,包括嵌入式数据结构如 其他文档、数组和文档数组等。

如下申明了一个mydoc 的文档,

字段(field)的命名都是由字符串组成

字段名称有以下几条限制:

对于不同的字段类型的存储 *** 作,字段名称验证规则并不相同。下面总结了不同的插入和更新 *** 作如何处理以美元 ($) 为前缀的字段名称

修改非 $ 前缀的字段

修改非 $ 前缀的最外层字段,通过 literal 实现

使用管道创建一个名为spring2022的新集合,更新 $ 为前缀的 $term 字段

MongoDB 使用点符号来访问数组的元素和访问嵌入文档的字段

要通过从零开始的索引位置指定或访问数组的元素,请将数组名称与点 () 和从零开始的索引位置连接起来,并用引号引起来

示例:

要使用点表示法指定或访问嵌入文档的字段,请将嵌入文档名称与点 () 和字段名称连接起来,并用引号引起来

示例:

BSON 文档的最大大小为 16 兆字节

最大文档大小有助于确保单个文档不会使用过多的 RAM,或者在传输期间不会使用过多的带宽。为了存储大于最大大小的文档,MongoDB 提供了 GridFS API。

与 JavaScript 对象不同,BSON 文档中的字段是有序的

查询 *** 作时字段顺序:

写 *** 作时字段顺序

对于写入 *** 作,MongoDB 保留文档字段的顺序,但以下情况除外:

在 MongoDB 中,存储在集合中的每个文档都需要一个唯一的 _id 字段作为主键。如果插入的文档省略了 _id 字段,MongoDB 驱动程序会自动为 _id 字段生成一个 ObjectId。 这也适用于通过带有 upsert: true 的更新 *** 作插入的文档

_id 字段具有以下限制:

_id 字段常用值:

针对这个需求,可以考虑使用 MongoDB 的嵌套文档来存储权限列表。可以将权限列表存储为一个文档,其中每个权限都是一个嵌套的子文档。下面是一个示例文档:

{

"_id": ObjectId("123456789012345678901234"),

"name": "权限列表",

"access": [

{

"id": "1",

"name": "权限1",

"code": "code1",

"children": [

{

"id": "11",

"name": "权限1-1",

"code": "code1-1"

},

{

"id": "12",

"name": "权限1-2",

"code": "code1-2",

"children": [

{

"id": "121",

"name": "权限1-2-1",

"code": "code1-2-1"

}

]

}

]

},

{

"id": "2",

"name": "权限2",

"code": "code2",

"children": [

{

"id": "21",

"name": "权限2-1",

"code": "code2-1"

}

]

}

]

}

在上面的示例文档中,access 是一个数组,其中每个元素都是一个权限对象,每个权限对象中包含 id、name、code 和 children 四个属性。如果一个权限有子权限,那么它的 children 属性就是一个嵌套的权限对象数组。

对于 *** 作数据的需求,可以使用 MongoDB 的官方驱动程序或者第三方库(如 Mongoose)来 *** 作数据。下面是一些示例代码:

查询权限

使用 find 方法查询权限文档,并将 access 数组返回即可。

const collection = dbcollection('permissions');

const doc = await collectionfindOne({});

const access = docaccess;

const collection = dbcollection('permissions');

const doc = await collectionfindOne({});

const access = docaccess;

const collection = dbcollection('permissions');

const parentId = '1';

const { name, code } = reqbody;

const newAccess = {

id: '13',

name,

code

};

const result = await collectionupdateOne(

{ 'accessid': parentId },

{ $push: { 'access$children': newAccess } }

);

const collection = dbcollection('permissions');

const parentId = '1';

const { name, code } = reqbody;

const newAccess = {

id: '13',

name,

code

};

const result = await collectionupdateOne(

{ 'accessid': parentId },

{ $push: { 'access$children': newAccess } }

);

在上面的代码中,使用 updateOne 方法更新权限文档。第一个参数是一个查询条件,用于定位需要更新的文档。这里使用 accessid 来查询权限文档,找到对应的权限记录。第二个参数是一个更新 *** 作,使用 $push *** 作符将新的权限对象添加到 access$children 数组中。$ 符号代表数组中匹配到的第一个元素。

编辑权限

使用 $set *** 作符更新指定权限对象的 name 和 code 属性。

const collection = dbcollection('permissions');

const id = '1';

const { name, code } = reqbody;

const result

如果回答不够完整,请指出!

希望能帮上忙

以上就是关于node.js获取mongodb中数组子文档中的一个元素全部的内容,包括:node.js获取mongodb中数组子文档中的一个元素、mongoDB-document、MongoDB 如何存储多级嵌套数据及 *** 作增删改查❓等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9769389.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存