3

Running mongod 3.6 and attempting to use this example.

Here is the sample data:

> db.students2.find().pretty()
{
    "_id" : 1,
    "grades" : [
        {
            "grade" : 80,
            "mean" : 75,
            "std" : 8
        },
        {
            "grade" : 85,
            "mean" : 90,
            "std" : 6
        },
        {
            "grade" : 85,
            "mean" : 85,
            "std" : 8
        }
    ]
}
{
    "_id" : 2,
    "grades" : [
        {
            "grade" : 90,
            "mean" : 75,
            "std" : 8
        },
        {
            "grade" : 87,
            "mean" : 90,
            "std" : 5
        },
        {
            "grade" : 85,
            "mean" : 85,
            "std" : 6
        }
    ]
}

I am attempting to use the all positional operator as specified in the example:

> db.students2.update({}, { $inc: { "grades.$[].std" : -2 } }, {multi: true})
WriteResult({
    "nMatched" : 0,
    "nUpserted" : 0,
    "nModified" : 0,
    "writeError" : {
        "code" : 16837,
        "errmsg" : "cannot use the part (grades of grades.$[].std) to traverse the element ({grades: [ { grade: 80.0, mean: 75.0, std: 8.0 }, { grade: 85.0, mean: 90.0, std: 6.0 }, { grade: 85.0, mean: 85.0, std: 8.0 } ]})"
    }
})

Why is this error message occurring? Am I not following the documentation properly?

Ashh
  • 44,693
  • 14
  • 105
  • 132
Bennett
  • 1,007
  • 4
  • 15
  • 29
  • Run this command in mongo shell `db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )` – Ashh Aug 10 '18 at 08:58
  • @AnthonyWinzlet Hey, this worked! Would love it if you could provide an answer to this question as well as elaborate a little bit on how to fix this issue if using a MongoDB driver (such as the official one or `mongoose`). – Bennett Aug 11 '18 at 23:03

1 Answers1

3

When switching from lower version to higher version for mongodb you have to set setFeatureCompatibilityVersion for your mongodb which

Enables or disables the features that persist data incompatible with earlier versions of MongoDB. You can only issue the setFeatureCompatibilityVersion against the admin database.

You can simply set this by running this command in mongo shell

db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
Ashh
  • 44,693
  • 14
  • 105
  • 132