gpt4 book ai didi

node.js - 使用 mongoose 在 mongoDb 中更新数组内的对象

转载 作者:行者123 更新时间:2023-12-03 12:16:26 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Mongoose find/update subdocument

(4 个回答)


4年前关闭。




我正在使用 MongoDB 更新对象值,该值位于 MongoDB 集合中的数组内。

我的收藏就像

{
"_id": ObjectId("59b7e839200a5c00ee2d2851"),
"player": "New",
"playesList": [
{
"_id": ObjectId("59b2a4f749fee40959e556d3"),
"name": "abcd",
},
{
"_id": ObjectId("59b2a4f749fee40959e556d4"),
"name": "pqrs",
}
]
}

现在我想更新id为 59b2a4f749fee40959e556d3的玩家的名字(我的意思是当前的第一个玩家名称是 abcd),其集合 ID 是 59b7e839200a5c00ee2d2851和播放器 New .

所以我试图用这个查询更新
play.update(
{
'_id': '59b7e839200a5c00ee2d2851',
'player': 'new',
'playesList._id': '59b2a4f749fee40959e556d3'
},
{
'$set': { 'playesList.$.name': 'wxyz' }
},
function(error, success) {
console.log(error, success);
}
)

但在这里我进入了控制台,如 null { ok: 1, nModified: 0, n: 0 }并且值无法更新到集合中。
请帮助我如何解决此错误。
先感谢您。

最佳答案

MongoDB集合中数组内的对象(文档)被称为-subdocuments

在这种情况下,使用自己的 _id 更新特定的子文档,您可以使用 Mongoose findOneAndUpdate方法:

play.findOneAndUpdate({
"_id": "59b7e839200a5c00ee2d2851",
"playesList._id": "59b2a4f749fee40959e556d3"
}, {
"$set": {
"playesList.$.name": "something"
}
}, function(error, success) {

})

首先,您需要在集合中找到文档:
"_id": "59b7e839200a5c00ee2d2851"

然后通过它的 _id 找到子文档使用第二个参数:
"playesList._id": "59b2a4f749fee40959e556d3"

当您找到要更新的子文档时,请使用 $set运算符将新值设置为 name找到的子文档的属性:
"$set": {
"playesList.$.name": "something"
}

请注意 findOneAndUpdate返回更新文档的先前状态。

工作示例:
var express = require('express')
var app = express()
var router = require('express').Router()
var mongoose = require('mongoose')
var Schema = mongoose.Schema

mongoose.connect('mongodb://localhost:27017/stackoverflowanswer')
mongoose.Promise = global.Promise

var PlayerSchema = new Schema({
play: String,
playersList: [{
name: String
}]
})

var Player = mongoose.model('Players', PlayerSchema)

app.use('/', router)

router.get('/add-player', function(req, res, next) {
var player = new Player()

player._id = "59b7e839200a5c00ee2d2851"
player.play = "New"
player.playersList.push({
_id: "59b2a4f749fee40959e556d3",
name: "abcd"
}, {
_id: "59b2a4f749fee40959e556d4",
name: "pqrs"
})

player.save(function(err) {
if (err) throw err

res.json({
message: 'Success'
})
})
})

router.get('/update-player', function(req, res, next) {
Player.findOneAndUpdate({
"_id": "59b7e839200a5c00ee2d2851",
"playersList._id": "59b2a4f749fee40959e556d3"
}, {
"$set": {
"playersList.$.name": "wxyz"
}
}, function(error, success) {
if (error) throw error

res.json({
message: 'Success'
})
})
})

app.listen(8080, function() {
console.log('Node.js listening on port ' + 8080)
})

关于node.js - 使用 mongoose 在 mongoDb 中更新数组内的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46190153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com