2016-05-18 14 views
0

Ich habe die folgende Struktur zu meinen Mongodb-Dokumenten, und wie Sie sehen werden, habe ich 3 URLs mit jeweils crawled auf True oder False festgelegt.MongoDB - Spezifische Dokument Felder zurückgeben

{ 
    "_id": { 
     "$oid": "573b8e70e1054c00151152f7" 
    }, 
    "domain": "example.com", 
    "good": [ 
     { 
      "crawled": true, 
      "added": { 
       "$date": "2016-05-17T21:34:34.485Z" 
      }, 
      "link": "/threads/11005-Cheap-booze!" 
     }, 
     { 
      "crawled": false, 
      "added": { 
       "$date": "2016-05-17T21:34:34.485Z" 
      }, 
      "link": "/threads/9445-This-week-s-voucher-codes" 
     }, 
     { 
      "crawled": false, 
      "added": { 
       "$date": "2016-05-17T21:34:34.485Z" 
      }, 
      "link": "/threads/9445-This-week-s-voucher-codes_2" 
     } 
    ], 

    "link_found": false, 
    "subdomain": "http://www." 
} 

Ich versuche, bestimmte Felder zurückzukehren, wo nur die URL mit crawled auf False zurückgegeben werden, dafür habe ich die folgende Abfrage:

.find({'good.crawled' : False}, {'good.link':True, 'domain':True, 'subdomain':True}) 

Doch was vs zurückgegeben, was ist erwartet ist anders als es ist, alle URLs zurückkehren, und zwar unabhängig davon, ob sie einen crawled Status True oder False

Was zurückgegeben ist: nur die Verbindungen mit crawled Satz

{ 
    u'domain': u'cashquestions.com', 
    u'_id': ObjectId('573b8e70e1054c00151152f7'), 
    u'subdomain': u'http://www.', 
    u'good': [ 
     { 
      u'link': u'/threads/9445-This-week-s-voucher-codes' 
     }, 
     { 
      u'link': u'/threads/9445-This-week-s-voucher-codes_2' 
     } 
      ] 
} 

Wie kann ich die False angeben zurückgegeben werden:

{ 
    u'domain': u'cashquestions.com', 
    u'_id': ObjectId('573b8e70e1054c00151152f7'), 
    u'subdomain': u'http://www.', 
    u'good': [ 
     { 
      u'link': u'/threads/11005-Cheap-booze!' 
     }, 
     { 
      u'link': u'/threads/9445-This-week-s-voucher-codes' 
     }, 
     { 
      u'link': u'/threads/9445-This-week-s-voucher-codes_2' 
     } 
      ] 
} 

Was ist zu erwarten?

+3

Mögliche Duplikat http://stackoverflow.com/questions/3985214/retrieve-only-the Objekt-Objekt-Array-in-Mongodb-Sammlung –

Antwort

0

Sie werden die Aggregation Rahmen verwenden möchten (dies wird in MongoDB arbeiten 3.0 und höher):

db.yourcolleciton.aggregate([ 
    // optional: only those with at least one false 
    {$match: {'good.crawled': false}}, 
    // get just the fields you need (plus _id) 
    {$project: {good:1, domain:1, subdomain: 1}}, 
    // get each in a separate temporary document 
    {$unwind: {'good': 1}}, 
    // limit to false 
    {$match: {'good.crawled': false}}, 
    // undoes the $unwind 
    {$group: {_id: "$_id", domain: {"$first": "$domain"}, 'subdomain' : {$first, '$subdomain'}, good: {"$push":"$good"}} 
]) 
Verwandte Themen