如何使用猫鼬为数组元素添加值?

Posted

技术标签:

【中文标题】如何使用猫鼬为数组元素添加值?【英文标题】:How to add value to array element withing collection using mongoose? 【发布时间】:2019-10-15 18:18:15 【问题描述】:

我已经编写了以下 mongoose 函数来在 mongodb 中创建新文档

createdata: (body) => 
    let sEntry = new SData(Object.assign(, 
        dataId: body.DataId
       //,
       //notes.message: body.message   
    ));
    return sEntry.save();

这里sData 架构包含notes 数组架构。

我无法使用notes.message: body.messagenotes [] 内的message 添加价值

我的架构定义如下:

var nSchema = new Schema(
    _id: type:ObjectId, auto: true ,
    message: String
);

var sSchema = new Schema(
    _id: type:ObjectId, auto: true ,
    dataId:  type:String, unique: true ,
    notes: [nSchema]

我还想提一下,对于每个 dataId,可以有多个 notes [] 条目。但是,SData 对于每个 dataId 只能有唯一的行条目。

我希望 notes 成为 SData 集合中的一个数组。如何在不创建单独的notes 集合的情况下实现它?我应该如何修改createdata 以适应所有给定的要求。

【问题讨论】:

【参考方案1】:

其他集合映射使用references,获取时使用populate

架构设计

var sSchema = new Schema(
    _id: type:ObjectId, auto: true ,
    dataId:  type:String, unique: true ,
    notes: [
        type: mongoose.Schema.Types.ObjectId,
        ref: 'nSchema',
    ]

添加数据

createdata: (body) => 
    let sEntry = new SData(
        dataId: body.DataId,
        notes: [nSchemaIds]
    );
    return sEntry.save();

【讨论】:

我应该创建单独的create function 来添加注释吗?另外,notes 会是一个单独的集合吗? Notes 是一个单独的集合,我认为这就是您想要的。插入注释后,您将其引用添加到另一个集合 我希望笔记成为SData 集合中的一个数组。如何在不创建单独的notes 集合的情况下实现?

以上是关于如何使用猫鼬为数组元素添加值?的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬为未知键定义模式

猫鼬为未知密钥定义架构

使用猫鼬findone时如何删除数组元素

如何使用节点 js 从猫鼬模式中读取嵌套数组元素?

如何使用猫鼬更新子文档数组中的特定元素? [复制]

如何避免在对象内部创建对象并使用猫鼬将元素直接推送到快速数组中?