sql >> Databáze >  >> NoSQL >> MongoDB

Jak hledat v poli pole objektů v mongodb

Řekněme, že chcete vyhledat awaiting stav pro kolekci users

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

Automaticky vyhledá v polích.

Aktualizace je však trochu jiná a měli byste použít arrayFilter :

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

Ujistěte se, že máte na svém find index dotaz:

Pro výše uvedený příklad

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

Mnoho dalších příkladů dostupných v Mongo Doc

UPRAVIT

Podle vašeho komentáře zde je pracovní příklad:

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. Jak mohu dělat více než/méně než pomocí MongoDB?

  2. více operátorů aktualizace mongo v jednom výpisu?

  3. MongoDB - Geoprostorový průnik dvou polygonů

  4. Jak seřadit výsledky dotazu mongodb na základě vnořených dokumentů