首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >单个嵌入子文档默认设置

单个嵌入子文档默认设置
EN

Stack Overflow用户
提问于 2016-02-18 15:58:08
回答 3查看 9K关注 0票数 26

猫鼬在4.2.7版本中创建了一个新的单子文档特性(文档特征请求),允许一个嵌入式子文档模式,它的行为方式是一对多的子文档。

在父级保存时创建默认的单个子文档的最佳方法是什么?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var UserPermisssionsSchema = new mongoose.Schema({
    siteAdmin: {
        type: Boolean,
        default: false,
    }
});

var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: UserPermisssionsSchema 
});

我希望在创建父用户文档时使用默认值创建permissions字段。

这样做是行不通的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: {
    type: UserPermisssionsSchema ,
    default: UserPermisssionsSchema
  }
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-18 17:37:12

请试试这个

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var PerSchema = new mongoose.Schema({
    siteAdmin: {type: Boolean, default: false}
  }); 

var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: { type: PerSchema, default: () => ({}) },
});

Mongoose v4.4.3测试它

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var User = mongoose.model('User', UserSchema);

function setUser() {
    var u = new User({
        fname: 'asa',
        lname: 'dddd'
    });

    u.save(function(err) {
        if (err)
            console.log(err);
        else
            console.log('save user successfully');
    });
}

结果是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ 
  "_id" : ObjectId("56c68321a548be98198ebb71"), 
  "fname" : "asa", 
  "lname" : "dddd", 
  "permissions" : {
       "_id" : ObjectId("56c68321a548be98198ebb70"), 
       "siteAdmin" : false
       },
   "__v" : 0
}

如果您想要permissions的默认值是{}。请按下面的方式试一试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var PerSchema = mongoose.Schema({
    siteAdmin: {type: Boolean}
}, {_id: false}); 

var UserSchema = mongoose.Schema({
    fname: String,
    lname: String,
    permissions: { type: PerSchema, required: true, default: {} },
}); 

测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function setUser() {
    var u = new User({
        fname: 'asa',
        lname: 'dddd'
    });

    u.save(function(err) {
        if (err)
            console.log(err);
        else
            console.log('save user successfully');
    });
}

结果是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ "_id" : ObjectId("56c687427191d54021875fb1"), 
  "fname" : "asa", 
  "lname" : "dddd",
  "permissions" : {  }, 
  "__v" : 0
}
票数 31
EN

Stack Overflow用户

发布于 2017-09-01 07:52:53

这里的猫鼬保护者,我推荐如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: 
    type: UserPermisssionsSchema ,
    default: () => ({}),
  }
});

这将使permissions默认为空对象,对于UserPermissionsSchema可能具有的任何默认值。如果您将default设置为UserPermisssionsSchema,如果您的属性之一碰巧与猫鼬模式方法重叠,则可能会出现一些不好的行为。

票数 20
EN

Stack Overflow用户

发布于 2020-10-09 01:18:46

单个嵌入子文档默认设置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var UserPermisssionsSchema = new mongoose.Schema({
    siteAdmin: {
        type: Boolean,
        default: false,
    }
});

var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: 
    type: UserPermisssionsSchema,
    default: () => ({}),
})

猫鼬多重(数组)嵌入式子文档默认设置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var UserPermisssionsSchema = new mongoose.Schema({
    siteAdmin: {
        type: Boolean,
        default: false,
    }
});

var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: 
    type: [UserPermisssionsSchema],
    default: () => ([]),
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35494875

复制
相关文章
MySQL 中使用时间戳
创建新记录和修改现有记录都更新方式 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 创建的时候设置时间,后续的修改不再更新 TIMESTAMP DEFAULT CURRENT_TIMESTAMP 创建的时候把字段设置为 0 ,以后修改才更新 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 创建时设置为给定值,以后更新会刷新这个时间 TIMESTAMP DEFAULT 'yyyy-mm-dd hh:mm
zucchiniy
2019/10/30
1.8K0
Spring Boot中使用时序数据库InfluxDB
除了最常用的关系数据库和缓存之外,之前我们已经介绍了在Spring Boot中如何配置和使用MongoDB、LDAP这些存储的案例。接下来,我们继续介绍另一种特殊的数据库:时序数据库InfluxDB在Spring Boot中的使用。
程序猿DD
2021/08/05
8940
Spring Boot中使用时序数据库InfluxDB
Excel VBA解读(143): 在自定义函数中使用整列引用时,如何更有效率?
Excel用户经常发现在公式中使用整列的引用很方便,这样可避免每次添加新数据时都必须调整公式。因此,当编写用户自定义函数时,可能会使用:
fanjy
2019/07/19
3K0
在Vue中使用Echarts
前端可视化是一个前端最基本的技能,要想做的好看,还是得借助一下百度家的echarts,那要怎么在Vue中使用echarts?这个官网没有给出实例,实例基本都是在jquery里面使用,引入的例子。
王小婷
2020/11/26
1.3K0
在Grafana中使用Variables
其实在公司内部使用Grafana完全是‘被逼的’。刚开始使用的时候完全是因为懒!也有考虑尽快的输出一些指标而不是走非常漫长的一个前、后、数据端的结伴开发。
CainGao
2020/04/14
12.7K4
在MATLAB中使用opencv
我们来说说第二类,需要做的事情是先编译opencv的源码、再编译matlab可用的mex文件夹,这两步的编译器必须是同一个,而最近几年的新版本matlab都推荐使用MinGW-w64编译器来使用mex、可是mexopencv提供的编译辅助函数在Windows系统上默认使用Visual Studio或者Windows SDK来编译,如果觉得自己需要Visual Studio的其他功能,安装一下也是挺好的
万木逢春
2019/10/09
6.2K0
在MATLAB中使用opencv
在 vuecli 中使用 echarts
可以按需引入的模块列表见 https://github.com/apache/incubator-echarts/blob/master/index.js
4O4
2022/04/25
2420
在 vuecli 中使用 echarts
在vue 中使用Stylus
Stylus => 一个CSS预处理器 安装 cnpm install stylus 初始化项目 vue init webpack filename cd filename cnpm install cnpm install stylus –save-dev cnpm install stylus-loader –save-dev npm run dev 使用 vue中使用Stylus .box background:red .... 引
大象无痕
2018/07/17
6930
在Go中使用Protobuf
本教程使用proto3版本的protocol buffer语言,提供了一个基本的在Go程序中使用protocol buffer的介绍。通过创建一个简单的示例应用程序,向你展示如何
KevinYan
2019/10/13
1.4K0
在Python中使用Elasticsearch
在这篇文章中,我将讨论Elasticsearch以及如何将其整合到不同的Python应用程序中。
小小科
2018/07/31
2.1K0
在Python中使用Elasticsearch
在Sequelize中使用迁移
迁移的好处,可以类比git。通过每次创建迁移文件,来支持更新,回滚数据库表结构,也方便协同开发,也避免人工手动去直接修改数据库,用代码自动管理。换个电脑,也不用去拷贝数据库,直接运行迁移就可以完全恢复开发环境,极大减轻了心智负担。
前端知否
2020/03/23
1.9K0
在ubuntu中使用supervisor
示例如下,在目录/etc/supervisor/conf.d/下创建redsocks2.conf,并加入:
羽翰尘
2019/11/20
6520
在vue中使用swiper
<template> <div class="main"> <!-- .swiper-container --> <div class="wrap"> <img class="bgImg" src="../../../../assets/images/fffbg.png" alt /> <swiper :options="swiperOption" ref="mySwiper"> <swiper-slide v-for="(item,index)
用户4344670
2020/02/13
6770
在Jetty中使用websocket
在工作中,我们有时候需要使用能与前端实时通信传输以通信,这种技术就是由Socket实现的,而Socket又有短连接和长连接之分,长连接技术就是我们今天要介绍的websocket。
Titan框架
2018/09/25
2.3K0
在Jetty中使用websocket
在 Flutter 中使用 WebView
我们知道在开发 Native App 时经常会有打开网页的需求,可供的选择通常只有两种:
出其东门
2019/08/09
3.5K0
在模板中使用函数
系统自带的函数,一般在functions.php中 // C函数,获取配置名称 <title>{:C('WEB_SITE_TITLE')}</title> // U函数,获取URL地址 <a class="brand" href="{:U('index/index')}">OneThink</a>
PM吃瓜
2019/08/12
1.2K0
在模板中使用函数
在Vue中使用Echarts
前端可视化是一个前端最基本的技能,要想做的好看,还是得借助一下百度家的echarts,那要怎么在Vue中使用echarts?这个官网没有给出实例,实例基本都是在jquery里面使用,引入的例子。
王小婷
2020/11/12
8170
在Vue中使用Echarts
在php中使用redis
说这么多就是为了表明,大部分情况下,redis是可以满足我们对于缓存的要求的。下面来说如何在php项目中使用redis作为缓存引擎。
ianzhi
2019/07/31
6460
在yii中使用memcache
说明: 1)class指明所有缓存类, CMemCache即为memcache 2) 当要使用多个cache轮询时,可以给每个cache配权重(weight)。如果只有一个cache,不加这个配置就可以了。
PHP学习网
2022/08/03
3200
点击加载更多

相似问题

openSSL的替代方案

20

Scala:废弃集差的替代方案

13

Environment.getExternalStorageDirectory()废弃替代方案

20

openssl_encrypt的替代方案

10

用于星火DataFrame的废弃DataFrame替代方案

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文