7

This is the format of my document:

{
    _id: some id,
    name: 'some name',
    versions: []
}

In the versions field I store objects like {v: '2.5', count: 5} where count holds the number of times a version is in used.

What is the simplest way to do the following?

  1. Insert a new object inside the versions array if it doesn't exist
  2. Ff a particular version exists inside the versions array then increment its count

1 Answer 1

11

Simplest way being should be,

db.collection.update({versions.v:'some_version'},{"$inc":{"versions.$.count":1}});

This will increment your count if version is exist, but as MongoDB documentation says, $ operator cannot be mixed with upsert, so above query won't result in insert if {versions.v:'some_version'} fails.

The positional operator cannot be combined with an upsert since it requires a matching array element. If your update results in an insert then the "$" will literally be used as the field name.

Below are JIRA tickets for supporting upsert with $. You can vote and watch these issue.

Upsert with $-positional operator can create bad documents

Support $ positional operator with an upsert

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.