2012-06-04 17 views
13

मेरी छवि साझाकरण एप्लिकेशन में आप एल्बम बना सकते हैं और उन्हें छवियां जोड़ सकते हैं। जब साइट से कोई छवि हटा दी जाती है, तो उसे उस एल्बम (एल्बम) से हटा दिया जाना चाहिए जो छवि (नाम, आईडी) के संदर्भ संग्रहीत करता है।किसी सरणी फ़ील्ड में एक मिलान ढूंढना

जिस चीज की मुझे आवश्यकता है, वह यह जानने के लिए है कि किस एल्बम ने छवि (संदर्भ) को हटाया है जिसे हटाया जा रहा है।

नीचे दिए गए मार्ग में मैंने अभी तक कोशिश की है, लेकिन मुझे क्वेरी पर एक त्रुटि मिली है। मैं MongoDB डॉक्स देख लिया है और वाक्य रचना इस तरह दिखता है:

db.collection.find({ field : { $in : array } }); 

मेरे मार्ग में क्षेत्र और सरणी स्थानों, जो काम करने के लिए प्रतीत नहीं होता बंद किया गया है।

मैं वास्तव में कुछ मदद की सराहना करता हूं। अग्रिम में धन्यवाद!

मेरे मॉडल ऐसा दिखाई देता है:

var AlbumSchema = new Schema({ 
     title    : String, 
     imageName   : [String], <-- array the contains of images names 
     imageId   : [String] <-- array the contains of images id's 
}); 

modelObject.AlbumSchema = AlbumSchema; 
modelObject.Album = mongoose.model('Album', AlbumSchema); 

var ImageSchema = new Schema({ 
    name : String, 
    size : Number, 
    type : String 
}); 

modelObject.ImgSchema = ImgSchema; 
modelObject.Image = mongoose.model('Image', ImgSchema); 

मार्ग एक छवि को हटाने के लिए:

app.get('/blog/delete/:id', function(req, res){ 

    model.ImagePost.findById(req.params.id, function (err, blog){ 

     var theImage = blog.name; 

     if (err) { 
      console.log(err); 
      // do something 
     } 

     var query = albumModel.Album.find({ imageName: { $in : theImage } }); 

     query.exec(function (err, albums) { 

      if (!albums) { 
       console.log(err); 
       // do something 

       blog.remove(function(err) { 
        console.log(err); 
        // do something 
       }); 

       res.redirect('/blogs'); 
      } 

      else { 
       // code for removing the image(s) in the albums 

       res.redirect('/blogs'); 
      } 
     }); 
    }); 
}); 

उत्तर

34

db.collection.find({ field : { $in : array } }); वाक्य रचना कि आप चाहते हैं नहीं है। यह कहता है "मुझे वह दस्तावेज़ ढूंढें जहां इस फ़ील्ड में सूची मानों में से एक है जिसे मैं आपको सरणी में देने जा रहा हूं।"

आप reaching into the array के दौरान समानता का उपयोग करना चाहते हैं।

db.collection.find({ imageName:theImage })

यह जहां imageName theImage तो यह एल्बम वापस आ जाएगी (या एल्बम एक तस्वीर एक से अधिक एल्बम में हो सकता है) मेरे दस्तावेज़ लगता है जो अपने imageName सरणी में इस छवि है कहते हैं।

+6

बहुत अच्छा जवाब (+1)। यह एक और लिंक है जिसे मैंने पाया http://docs.mongodb.org/manual/tutorial/query-documents/#match-an-array-element – Tom

+0

धन्यवाद टॉम ___;) – coiso

+1

लिंक अब मर चुका है। – Neta

संबंधित मुद्दे