javascript - 猫鼬。如何更新包含在另一个数组中的数组元素?
问题描述
我有一个非常复杂的模式,它有一个内部数组,每个数组元素都包含一个级别数组。但是如何更新二级数组中的数据。
我需要更新services
数组但如何获得访问权限?我有 Item 的 _id、线程号、班次号(只能是 3,这不是数组,因为三级数组太难了)和服务名称。
我需要类似(伪代码)
getByItemId(id)
.getByThreadNumber(tNumber)
.getByShift(numberShift)
.getByServiceName(name)
.updateLogInCounter(newValCounter)
const itemSchema = new Schema({
threads: [
{
number: {
type: Number,
requred: true
},
{
firstShift: {
"someData": ... ,
"services": [
"name": {type: String}
"lastUpdate": {type: Date},
"logInCounter": {type: Number}
]
},
secondShift: {
"someData": ... ,
"services": [
"name": {type: String},
"lastUpdate": {type: Date},
"logInCounter": {type: Number}
]
},
thirdShift: {
"someData": ... ,
"services": [
"name": {type: String},
"lastUpdate": {type: Date},
"logInCounter": {type: Number}
]
}
}
}
]
})
也许这个数据结构不正确,这是不可能的?也许我需要创建很多集合?也许一些插件可以帮助我。或者这很正常,如果是的话如何获取我的目标数据?
解决方案
您可以在 3.6 中使用以下代码
使用计算的属性名称来动态传递班次编号。$[identifier]
位置运算符匹配线程号和服务名称,后跟线程服务内的增量 logInCounter。
var query = {'_id': id};
var inc = {'$inc':{'threads.$[t].' + [numberShift] + '.services.$[s].logInCounter':newValCounter}};
var arrayFilters = {arrayFilters: [{'t.number': tNumber, 's.name':name}]};
Item.findOneAndUpdate(query, inc, arrayFilters);
推荐阅读
- c - 在我的基于列表的程序上出现 0xC0000005 崩溃
- c# - NReco HTML to PDF 关闭目录生成
- mysql - 如何在mysql中的另一列排序后混合列的值
- go - 以 JSON 格式打印地图数组
- javascript - 在挂起模式周围静音 AudioContext 警告
- svg - 我怎样才能得到 NVDA 和类似的东西来读出 aria-label 和内容
? - python - py_call_impl (callable, dots$args, dots$keywords) 中的错误:ImportError: [E048] Can't import language en from spacy.lang
- angular - 是否有语法糖用于将子元素作为模板传递给角度组件(2+)
- c++ - 使用通过成员指针访问的互斥锁来控制对该类的线程访问
- django - 通过 s3 在 Django 中提供 csv 文件时,每行后面都有额外的行