sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb schemadefiniering

Vad jag kan se från din kod, dina nuvarande News och Review Schemat ser bra ut.

Du måste definiera ett annat Schema för Trending .

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

Medan du sparar nya News eller Reviews , infoga _id av nyligen sparat dokument i trending samling.

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
    }
});

På samma sätt när du sparar 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
    }
});

Alltså nu Trending Samlingen kommer att innehålla, nyligen sparade News eller Review , i den ordning de created . Således kommer du att kunna få ny Review eller News Lägg upp.

Medan Trending hämtas , kan du populate dem med News eller Review Schema baserat på 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 kan du visa de senaste News eller Review och skriv typen postType .

Hoppas detta är vad du vill.




  1. MongoDB, lägga till nytt { field :value } i befintligt inbäddat dokument med flernivåpunktsnotation?

  2. Spara föremål i Mongoose för loop med schemametoder

  3. mongoose hitta alla skickar inte återuppringning

  4. Kunde inte hämta en resurs från poolen (SocketTimeoutException:)