
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 如何存储多级嵌套数据及 *** 作增删改查❓等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)