MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Дефиниране на схема на Mongodb

От това, което мога да видя от вашия код, вашите текущи News и Review Схемата изглежда добре.

Трябва да дефинирате друга Schema за Trending .

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

Докато записвате нови News или Reviews , вмъкнете _id на новозаписан документ в trending колекция.

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

По същия начин, докато запазвате публикацията за преглед

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

Ето защо сега Trending Колекцията ще съдържа наскоро запазени News или Review , в реда, в който са created . Така ще можете да получите нов Review или News Публикувайте.

Докато извличате Trending , можете да populate чрез News или Review Schema въз основа на 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
    }
});

Вече можете да показвате най-новите News или Review и напишете типа postType .

Надяваме се, че това е, което искате.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да актуализирам база данни MongoDb в Java?

  2. Запитването на Mongo отнема много време. Как да стане по-бързо?

  3. Как да намерите всички колекции от mongoose

  4. Поддържане на комплекти реплики на MongoDB в облака с помощта на Ansible

  5. Дълъг акумулатор вместо Double във функцията MongoDB group().