MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment rechercher dans un tableau de tableau d'objets dans mongodb

Supposons que vous souhaitiez rechercher le awaiting statut pour la collection users

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

Il recherchera automatiquement dans les tableaux.

La mise à jour, cependant, est un peu différente et vous devez utiliser arrayFilter :

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

Assurez-vous d'avoir un index sur votre find requête :

Pour l'exemple ci-dessus

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

De nombreux autres exemples sont disponibles sur le Mongo Doc

MODIFIER

Conformément à votre commentaire, voici un exemple de travail :

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" },
    ],
  }
);