sql >> Database >  >> NoSQL >> MongoDB

Hoe te zoeken in een array van objecten in mongodb

Stel dat u wilt zoeken naar de awaiting status voor de verzameling users

db.users.find({"version.files.status":"awaiting"}).pretty()

Het zoekt automatisch binnen de arrays.

Updaten is echter een beetje anders en u moet arrayFilter :

db.users.updateOne(
  {
    "version.files._id": "606592b3c5d509071857f6e8",
  },
  {
    $set: {
      "version.$[version].files.$[file].url": "something else",
    },
  },
  {
    arrayFilters: [
      { "version._id": "606592b1c5d509071857f6e7" },
      { "file._id": "606592b3c5d509071857f6e8" },
    ],
  }
);

Zorg voor een index op uw find vraag:

Voor het bovenstaande voorbeeld

db.users.createIndex({"version.files._id":1},{background:true})

Veel meer voorbeelden beschikbaar op de Mongo Doc

BEWERKEN

Volgens uw opmerking is hier een werkend voorbeeld:

db.users.findOneAndUpdate(
  { "version.files._id": "606592b3c5d509071857f6e8" },
  {
    $set: {
      "version.$[version].files.$[file].url": "Test URL",
      "version.$[version].files.$[file].status": "Test status",
    },
  },
  {
    returnNewDocument: true,
    arrayFilters: [
      { "version._id": "606592b1c5d509071857f6e7" },
      { "file._id": "606592b3c5d509071857f6e8" },
    ],
  }
);



  1. Mongoid Query DB op virtueel kenmerk

  2. Berichtantwoorden insluiten in de ouder van het bericht met mongodb met behulp van mongoid

  3. Dictionary<string, object>-naar-BsonDocument-conversie zonder _t-veld

  4. Valideer object tegen Mongoose-schema zonder op te slaan als een nieuw document