{"id":428,"date":"2016-10-01T05:48:30","date_gmt":"2016-10-01T01:48:30","guid":{"rendered":"http:\/\/infobs.athn.ru\/?p=428"},"modified":"2016-10-01T05:48:30","modified_gmt":"2016-10-01T01:48:30","slug":"mongo-i-c-agregatsiya-pipeline","status":"publish","type":"post","link":"https:\/\/infobase.athn.ru\/program\/2016\/10\/mongo-i-c-agregatsiya-pipeline\/","title":{"rendered":"Mongo \u0438 C#: \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044f, pipeline"},"content":{"rendered":"<p>\u041e\u0447\u0435\u043d\u044c \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 (~2012-13 \u0433\u0433.), \u043d\u043e \u0432\u0434\u0440\u0443\u0433 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c, \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0441\u0432\u0435\u0436\u0438\u0442\u044c.<\/p>\n<pre>\n            var match = new BsonDocument \n            { { \n                    \"$match\", new BsonDocument \n                    {         \n                        {\n                            \"Date\", new BsonDocument \n                            { { \"$lte\", DateTime.Now } }\n                        }\n                    } \n            } };\n            var group = new BsonDocument\n            { {\n                    \"$group\", new BsonDocument\n                    {\n                        { \"_id\",\"$Blog._id\" },\n                        {\n                            \"PublishDate\", new BsonDocument \n                            { { \"$max\", \"$Date\" } }\n                        }\n                    }\n            } };\n\n            var project = new BsonDocument\n            { {\n                    \"$project\", new BsonDocument\n                    {\n                        { \"Blog._id\", \"$_id\" },\n                        { \"PublishDate\", \"$PublishDate\" }\n                    }\n            } };\n\n            var sort = new BsonDocument { { \"$sort\", new BsonDocument { { \"PublishDate\", -1 } } } };\n            var skip = new BsonDocument { { \"$skip\", (page - 1) * count } };\n            var limit = new BsonDocument { { \"$limit\", count } };\n\n            var pipeline = new[] { match, group, sort, project, skip, limit };\n            var lastPostsInBlogs = this.mongoContext.Posts\n                .Aggregate(pipeline)\n                .ResultDocuments.Select(x =&gt; BsonSerializer.Deserialize(x))\n                .ToList();\n\n            return\n                lastPostsInBlogs.Join(\n                    this.mongoContext.Blogs.AsQueryable()\n                        .Where(condition),\n                    pb =&gt; pb.Blog.Id,\n                    b =&gt; b.Id,\n                    (pb, b) =&gt;\n                    new BlogItem()\n                    {\n                        Id = b.StrId,\n                        Alias = b.Alias,\n                        Title = b.Title,\n                        Description = b.Info,\n                        CoverFile = b.CoverFile ?? DomainAppSettings.DefaultPreview,\n                        CanPost = b.Owner.AccountId == visitorId || (b.IsCommon &amp;&amp; b.Members.Contains(visitorId)),\n                        LastUpdated = b.LastUpdated,\n                        LastPosts = this.mongoContext.Posts\n                            .AsQueryable()\n                            .Where(p =&gt; p.Blog.Id == b.Id &amp;&amp; p.PublishDate  p.PublishDate)\n                            .Take(3)\n                            .Select(p =&gt; new PostLine()\n                            {\n                                Id = p.StrId,\n                                Number = p.Number,\n                                BlogAlias = p.Blog.Alias,\n                                Title = p.Title,\n                                Date = p.Date\n                            })\n                    }).ToArray();\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u041e\u0447\u0435\u043d\u044c \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 (~2012-13 \u0433\u0433.), \u043d\u043e \u0432\u0434\u0440\u0443\u0433 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c, \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0441\u0432\u0435\u0436\u0438\u0442\u044c. var match = new BsonDocument { { &#171;$match&#187;, new BsonDocument { { &#171;Date&#187;, new BsonDocument { { &#171;$lte&#187;, <a class=\"more-link\" href=\"https:\/\/infobase.athn.ru\/program\/2016\/10\/mongo-i-c-agregatsiya-pipeline\/\">Continue Reading \u2192<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32,53,20],"tags":[],"class_list":["post-428","post","type-post","status-publish","format-standard","hentry","category-csharp","category-mongodb","category-mycode"],"_links":{"self":[{"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/posts\/428","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/comments?post=428"}],"version-history":[{"count":0,"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/posts\/428\/revisions"}],"wp:attachment":[{"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/media?parent=428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/categories?post=428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/tags?post=428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}