通过mongoose更新mongodb中嵌套数组中的数据对象

问题描述

我在更新数据方面存在严重问题。我不知道如何更新文档中数组对象中的特定字段。

这是我的模式模型:

var shiftSchema = new Schema({
Phone: String,final: Boolean,statusSH: String,order: {
    startTime: String,finishTime: String,income: String,orders: [{
        stat: String,orderId: String,customerPhone: String,orderQuantity: String,orderCost: String,orderCondition: String,orderTag: String
    }]
}
});

当我使用“查找”时,它会给我文档而不只是对象。

现在如何找到“ orderId”来编辑“ stat”?

请注意,我没有要更新的对象的索引,只能使用“ find”或“ findOne”。

我在网上搜索了所有内容,却找不到很好的指南和示例。

对不起,我英语不好。

所有提示将不胜感激。谢谢。

解决方法

您可以尝试运行此查询以更新stat属性:

shiftSchema.updateOne({
  'order.orders.orderId': 'id'
},{
  '$set': {'order.orders.$.stat': 'newStatus'}
})
.then((result) => {
  console.log(result)
},(e) => {
  console.log(e)
})

您可以看到我使用positional $ operator来访问数组中的元素并更新它而未指定该元素的位置(带有索引)。

我还使用$set替换了字段的值。

仅使用findfindOne就不会进行实际的更新。