sql >> データベース >  >> NoSQL >> MongoDB

mongooseを使用してmongoDbの配列内のオブジェクトを更新します

    MongoDBコレクションの配列内のオブジェクト(ドキュメント)は呼び出されます-サブドキュメント

    この場合、特定のサブドキュメントを独自の_idで更新します 、Mongoose findOneAndUpdate を使用できます 方法:

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

    まず、コレクション内のドキュメントを次のように見つける必要があります:

    "_id": "59b7e839200a5c00ee2d2851"
    

    次に、_idでサブドキュメントを検索します 2番目のパラメーターの使用:

    "playesList._id": "59b2a4f749fee40959e556d3"
    

    更新するサブドキュメントが見つかったら、 $set<を使用します。 / a> 新しい値を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)
    })
    


    1. URIが間違っているため、MongoDBに接続できません

    2. MongooseでrunCommandを実行する方法は?

    3. java用のmongoドライバーを使用してインターフェースオブジェクトのリストを保存する

    4. 接尾辞が-numberの文字列でMongoDBクエリをソートするにはどうすればよいですか?