MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cập nhật đối tượng bên trong mảng trong mongoDb bằng mongoose

Các đối tượng (tài liệu) bên trong mảng trong bộ sưu tập MongoDB được gọi - tài liệu con

Trong trường hợp này, để cập nhật tài liệu con cụ thể bằng _id của riêng nó , bạn có thể sử dụng Mongoose findOneAndUpdate phương pháp:

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

})

trước tiên bạn cần tìm tài liệu trong bộ sưu tập với:

"_id": "59b7e839200a5c00ee2d2851"

sau đó tìm tài liệu con theo _id của nó sử dụng tham số thứ hai:

"playesList._id": "59b2a4f749fee40959e556d3"

và khi bạn tìm thấy tài liệu phụ mà bạn muốn cập nhật, hãy sử dụng $ set toán tử để đặt giá trị mới thành name tài sản của tài liệu phụ được tìm thấy:

"$set": {
    "playesList.$.name": "something"
}

Lưu ý rằng findOneAndUpdate trả về trạng thái trước đó của tài liệu được cập nhật.

Ví dụ làm việc:

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)
})


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Duy trì thứ tự các yêu cầu http trong vòng lặp for trong javascript

  2. Làm cách nào để chạy MongoDB và Mongo-express với docker-soạn?

  3. Không thể tạo không gian tên trong giao dịch nhiều tài liệu (MongoDB 4.0, Spring Data 2.1.0, Spring Boot)

  4. pymongo:tên 'ISODate' không được xác định

  5. Nhà điều hành đường ống tổng hợp MongoDB $ ne