MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Xác định lược đồ Mongodb

Từ những gì tôi có thể thấy từ mã của bạn, News hiện tại của bạn và Review Lược đồ trông ổn.

Bạn cần xác định một Schema khác cho Trending .

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

Trong khi lưu News mới hoặc Reviews , chèn _id của tài liệu mới được lưu trong trending bộ sưu tập.

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

Tương tự khi lưu Bài đánh giá

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

Vì vậy, hiện tại Trending Bộ sưu tập sẽ chứa News mới được lưu hoặc Review , theo thứ tự chúng được created . Vì vậy, bạn sẽ có thể nhận được Review mới hoặc News Đăng.

Trong khi tìm nạp Trending , bạn có thể populate họ sử dụng News hoặc Review Schema dựa trên 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
    }
});

Giờ đây, bạn có thể hiển thị News mới nhất hoặc Review và viết kiểu postType .

Hy vọng đây là những gì bạn muốn.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Thiết kế lược đồ MongoDB (mảng lồng nhau so với bộ sưu tập riêng biệt)

  2. Meteor có những cơ chế bảo mật nào?

  3. AuthSource có nghĩa là gì trong url cơ sở dữ liệu mongo?

  4. Chuyển đổi chuỗi thành ngày tháng trong mongodb

  5. Mongoose chọn các trường (lồng nhau)