MongoDB संग्रह में सरणी के अंदर की वस्तुओं (दस्तावेज़ों) को कहा जाता है - उपदस्तावेज़
इस मामले में, विशिष्ट उप-दस्तावेज़ को अपने _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)
})