Aki*_*kib 4 database mongoose mongodb node.js
我正在使用 MongoDB 更新对象值,该值位于 MongoDB 集合中的数组内。
我的收藏就像
{
"_id": ObjectId("59b7e839200a5c00ee2d2851"),
"player": "New",
"playesList": [
{
"_id": ObjectId("59b2a4f749fee40959e556d3"),
"name": "abcd",
},
{
"_id": ObjectId("59b2a4f749fee40959e556d4"),
"name": "pqrs",
}
]
}
Run Code Online (Sandbox Code Playgroud)
现在我想更新其 id 为的59b2a4f749fee40959e556d3玩家的名称(我的意思是当前的第一个玩家名称为 abcd),其集合 id 为59b7e839200a5c00ee2d2851和 player New。
所以我试图用这个查询更新
play.update(
{
'_id': '59b7e839200a5c00ee2d2851',
'player': 'new',
'playesList._id': '59b2a4f749fee40959e556d3'
},
{
'$set': { 'playesList.$.name': 'wxyz' }
},
function(error, success) {
console.log(error, success);
}
)
Run Code Online (Sandbox Code Playgroud)
但是在这里我进入了控制台,null { ok: 1, nModified: 0, n: 0 }并且值无法更新到集合中。请帮助我如何解决此错误。先感谢您。
Mik*_*ail 10
MongoDB集合中数组内的对象(文档)被称为-子文档
在这种情况下,要使用自己的更新特定子文档_id,您可以使用 Mongoose findOneAndUpdate方法:
play.findOneAndUpdate({
"_id": "59b7e839200a5c00ee2d2851",
"playesList._id": "59b2a4f749fee40959e556d3"
}, {
"$set": {
"playesList.$.name": "something"
}
}, function(error, success) {
})
Run Code Online (Sandbox Code Playgroud)
首先,您需要在集合中找到文档:
"_id": "59b7e839200a5c00ee2d2851"
Run Code Online (Sandbox Code Playgroud)
然后通过_id使用第二个参数查找子文档:
"playesList._id": "59b2a4f749fee40959e556d3"
Run Code Online (Sandbox Code Playgroud)
当您找到要更新的子文档时,使用$set运算符将新值设置name为找到的子文档的属性:
"$set": {
"playesList.$.name": "something"
}
Run Code Online (Sandbox Code Playgroud)
请注意,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)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5348 次 |
| 最近记录: |