我有一个非常复杂的架构,它有一个内部数组,每个数组元素都包含一个多级数组。但是如何更新第二级数组内的数据。
我需要更新services
数组但如何访问?我有项目的 _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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句