sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man söker i array of array of object i mongodb

Låt oss säga att du vill söka efter den awaiting status för samlingen users

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

Den kommer automatiskt att söka inom arrayerna.

Uppdatering är dock lite annorlunda och du bör använda arrayFilter :

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

Se till att ha ett index på din find fråga:

För exemplet ovan

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

Många fler exempel tillgängliga på Mongo-dokumentet

REDIGERA

Enligt din kommentar, här är ett fungerande exempel:

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. Big Data Processing Engines – Vilken ska jag använda?:Del 1

  2. MongoDB - Projektionsfrågor

  3. Modellera undersamlingar i MongoDB Realm Sync

  4. Ta bort allt i en MongoDB-databas