2016-05-13 1 views
0

Je veux mettre à jour le 'crawl' imbriqué à True dans le document approprié avec l'URL spécifiée. Je suis assez nouveau pour mongodb et je ne peux pas sembler comprendre cela, n'importe quelle aide est très appréciée.MongoDB - Mise à jour d'un document imbriqué

structure collection

{ 
    "_id": { 
     "$oid": "56e9978732beb44a2f2ac6ae" 
    }, 
    "domain": "techweekeurope.co.uk", 
    "good": [ 
     { 
      "crawled": false, 
      "added": { 
       "$date": "2016-03-16T17:27:17.461Z" 
      }, 
      "link": "/workspace/microsoft-dell-windows-surface-106648" 
     }, 
     { 
      "crawled": false, 
      "added": { 
       "$date": "2016-03-16T17:27:17.461Z" 
      }, 
      "link": "/workspace/new-street-view-images-raise-privacy-concerns-5850" 
     }, 
     { 
      "crawled": false, 
      "added": { 
       "$date": "2016-03-16T17:27:17.461Z" 
      }, 
      "link": "/workspace/quiz-of-the-week-dell-reborn-106744" 
     } 
    ], 
    "bad": [], 
    "link_found": false, 
    "subdomain": "http://www.", 
    "crawled": true 
} 

update requête

self.collection.update({'good.link':'/workspace/microsoft-dell-windows-surface-106648'}, {'crawled': True}) 

Répondre

1

Dans la première recherche de documents avec lien et deuxième série valeur mise à jour du document. Vous devez spécifier good. $. Crawled pour spécifier cet élément de tableau à mettre à jour.

.update(
     {'good.link':'/workspace/microsoft-dell-windows-surface-106648'}, 
     { 
      $set : {'good.$.crawled': true} 
     } 
) 
+0

[Pour référence] (https://docs.mongodb.com/v3.0/reference/operator/update/positional/) –

+0

Merci, j'ai essayé ce que vous avez dit d'abord et il ne fonctionnait pas, mais Je viens de voir votre montage et ça fonctionne parfaitement. Merci pour votre aide, réponse acceptée. – Adders

+0

Vous êtes les bienvenus .. Oui, il y avait une faute de frappe avant. Merci d'avoir accepté la réponse. –

0

Vous devez utiliser $elemMatch pour interroger des entrées spécifiques dans un tableau d'un document. Une fois que vous l'avez associé, vous pouvez utiliser $set pour changer la valeur

Cet exemple est pour find mais il fonctionne aussi avec mise à jour.

db.survey.find(
    { results: { $elemMatch: { product: "xyz", score: { $gte: 8 } } } } 
) 
+0

Il n'y a qu'une seule condition de requête. Pas besoin d'utiliser $ elemMatch pour cela. –