使用在猫鼬中不起作用的数组过滤器更新多个嵌套数组
to update multiple nested array using array filter not working in mongoose
我正在将 nodeJS 与 mongoldb 3.6.4 一起使用。我试过 Arrayfilter 来更新嵌套的子文档。但它没有更新价值。这是我尝试过的示例代码(在合并 Anthony Winzlet 的评论以进行异步调用之后)
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var DrugRefSchema = new Schema({
drugRefs: [{
refName: String,
drugs: [{
name: String,
drugType:String,
}]
}]
});
module.exports = mongoose.model('DrugRef', DrugRefSchema);
async function UpdateMedList () {
const out = await DrugRef.aggregate([
{ $unwind: '$drugRefs'},
{ $unwind: '$drugRefs.drugs'},
{ $project : { refName:'$drugRefs.refName', med:'$drugRefs.drugs.name',_id:0}},
{ $group: {_id: { med: '$med',refName:'$refName'}}},
{ $project : { med:'$_id.med', refName:'$_id.refName',_id:0}},
])
out.map(async(data) => {
var refName=data.refName;
var oldName=data.med;
var newName=oldName.trim();
const updateName = await DrugRef.update(
{ },
{ $set:{"drugRefs.$[i].drugs.$[j].name":newName}},
{ arrayFilters: [ { "i.refName": refName },{ "j.name": oldName }], "multi": true }
)
console.log("Orig:'"+oldName+"': to be updated:'"+newName+"':");
console.log("update Result:"+JSON.stringify(updateName));
})
}
并且名称仍未更改。求助
猫鼬版本有问题。这是4.3。当我升级到 5.x 它开始工作。
此外,当我使用带有 -g 选项的 npm install mongoose 升级时,它升级到 5.3.0,但我的模块 mongoose 仍指向 4.3。然后我还必须在没有 -g 的情况下安装 mongoose
我正在将 nodeJS 与 mongoldb 3.6.4 一起使用。我试过 Arrayfilter 来更新嵌套的子文档。但它没有更新价值。这是我尝试过的示例代码(在合并 Anthony Winzlet 的评论以进行异步调用之后)
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var DrugRefSchema = new Schema({
drugRefs: [{
refName: String,
drugs: [{
name: String,
drugType:String,
}]
}]
});
module.exports = mongoose.model('DrugRef', DrugRefSchema);
async function UpdateMedList () {
const out = await DrugRef.aggregate([
{ $unwind: '$drugRefs'},
{ $unwind: '$drugRefs.drugs'},
{ $project : { refName:'$drugRefs.refName', med:'$drugRefs.drugs.name',_id:0}},
{ $group: {_id: { med: '$med',refName:'$refName'}}},
{ $project : { med:'$_id.med', refName:'$_id.refName',_id:0}},
])
out.map(async(data) => {
var refName=data.refName;
var oldName=data.med;
var newName=oldName.trim();
const updateName = await DrugRef.update(
{ },
{ $set:{"drugRefs.$[i].drugs.$[j].name":newName}},
{ arrayFilters: [ { "i.refName": refName },{ "j.name": oldName }], "multi": true }
)
console.log("Orig:'"+oldName+"': to be updated:'"+newName+"':");
console.log("update Result:"+JSON.stringify(updateName));
})
}
并且名称仍未更改。求助
猫鼬版本有问题。这是4.3。当我升级到 5.x 它开始工作。 此外,当我使用带有 -g 选项的 npm install mongoose 升级时,它升级到 5.3.0,但我的模块 mongoose 仍指向 4.3。然后我还必须在没有 -g 的情况下安装 mongoose