MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да търсите в масив от масив от обекти в mongodb

Да приемем, че искате да потърсите awaiting състояние за колекцията users

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

Автоматично ще търси в масивите.

Актуализирането обаче е малко по-различно и трябва да използвате arrayFilter :

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

Уверете се, че имате индекс на вашата find заявка:

За горния пример

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

Много повече примери са налични в Mongo Doc

РЕДАКТИРАНЕ

Според вашия коментар, ето работещ пример:

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. MongoDB - помощ при PHP заявка

  2. MONGO получава само името на документите, но не и всички документи

  3. Как да изпълня заявка за идентификационен масив в Mongoose?

  4. Mongoose добавя множество елементи към базата данни

  5. Инсталиране на Mongoose в NodeJS 0.10.8