sql >> データベース >  >> NoSQL >> MongoDB

Mongodbスキーマの定義

    私があなたのコードから見ることができるものから、あなたの現在のニュース およびReview スキーマは正常に見えます。

    別のSchemaを定義する必要があります Trendingの場合 。

    var TrendingSchema = new mongoose.Schema({
        referenceId : {
            type : mongoose.Schema.Types.ObjectId
        },
        postType : String //To store News or 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作成の順序で 。したがって、新しい Reviewを取得できるようになります またはニュース 投稿。

    Trendingの取得中 、入力できます Newsを使用して またはReview スキーマ 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
        }
    });
    

    これで、最新のニュースを表示できます またはReview タイプpostTypeを記述します 。

    これがあなたの望むものであることを願っています。




    1. MapReduceのHadoopカウンターとカウンターの種類

    2. MongoDBISODateオブジェクトから失われたナノ秒

    3. MongoDB $ extract

    4. MongoDB $ rand