sql >> Database >  >> NoSQL >> MongoDB

Mongodb-schema definiëren

Van wat ik kan zien aan je code, je huidige News en Review Schema ziet er goed uit.

U moet een ander Schema definiëren voor Trending .

var TrendingSchema = new mongoose.Schema({
    referenceId : {
        type : mongoose.Schema.Types.ObjectId
    },
    postType : String //To store News or Reviews
});

Tijdens het opslaan van nieuw News of Reviews , voeg de _id . in van nieuw opgeslagen document in de trending collectie.

var news = new News();
news.image = newsImage;
...
news.save(function(err,result)
{
    if(!err)
    {
        var trending =  new Trending();
        trending.referenceId = result._id;
        trending.postType = "News";
        treding.save(function(err)
        {
            if(!err)
            {
                //success response
            }
            else
            {
                //error  response
            }
        });
    }
    else
    {
        //send error response
    }
});

Evenzo tijdens het opslaan van Review Post

var review = new Review();
review.image = reviewImage;
...
review.save(function(err,result)
{
    if(!err)
    {
        var trending =  new Trending();
        trending.referenceId = result._id;
        trending.postType = "review"
        treding.save(function(err)
        {
            if(!err)
            {
                //success response
            }
            else
            {
                //error  response
            }
        });
    }
    else
    {
        //send error response
    }
});

Dus nu Trending Verzameling bevat nieuw opgeslagen News of Review , in de volgorde waarin ze zijn created . Zo kun je een nieuwe Review . krijgen of News Posten.

Tijdens het ophalen van Trending , kunt u populate ze met behulp van News of Review Schema gebaseerd op het postType .

Trendign.find({}).limit(10).exec(function(err,result)
{
    if(!err && result.length!=0)
    {
        var trendingPosts = [];
        result.forEach(function(trending){
            if(trending.postType === "News"){
                trending.populate({path : 'referenceId',model : 'News'},function(err,populatedItem)
                {
                    if(!err)
                    {
                        trendingPosts.push(populatedItem);
                    }
                });
            }
            else if(trending.postType === "Review"){
                trending.populate({path : 'referenceId',model : 'Review'},function(err,populatedItem)
                {
                    if(!err)
                    {
                        trendingPosts.push(populatedItem);
                    }
                });
            }
        });
        //now send the trendingPost array with latest News and Review Posts
    }
    else
    {
        //send Error response
    }
});

Nu kunt u het laatste News weergeven of Review en schrijf het type postType .

Ik hoop dat dit is wat je wilt.




  1. Hoe kan ik sorteren en beperken met Mongoose

  2. Mongoose geneste document update mislukt?

  3. Mongo werkt niet meer na upgrade

  4. Groepeer en tel per maand