MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak wyszukiwać w tablicy tablicy obiektów w mongodb

Załóżmy, że chcesz wyszukać awaiting status kolekcji users

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

Automatycznie przeszuka tablice.

Aktualizacja jest jednak nieco inna i powinieneś użyć arrayFilter :

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

Upewnij się, że masz indeks w swoim find zapytanie:

W powyższym przykładzie

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

Więcej przykładów dostępnych w Mongo Doc

EDYTUJ

Zgodnie z Twoim komentarzem, oto działający przykład:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 3 sposoby konwersji daty na ciąg znaków w MongoDB

  2. Znajdź różnicę między 2 dokumentami w mongoDB a powłoką mongo

  3. MongoDB Query Help - zapytanie o wartości dowolnego klucza w podobiekcie

  4. Jak skonfigurować oddzielną bazę danych testów i rozwoju w meteor

  5. Usuń określony zagnieżdżony obiekt z tablicy obiektów