
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдЪреНрдЪ-рд▓реЛрдб рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдЖрдк рдЕрдм рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рд╕реНрддреНрд░реАрдп рд╕рдВрдмрдВрдз рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред NoSQL рдбреЗрдЯрд╛рдмреЗрд╕ рддреЗрдЬреА рд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рд░рд╣реЗ рд╣реИрдВ (NoSQL рди рдХреЗрд╡рд▓ SQL рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИ)ред рдРрд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реЗ рдПрдХ MongoDB рд╣реИ, рдЬрд┐рд╕рдиреЗ рдкрд╣рд▓реЗ рд╣реА
рдбрд┐рдЬреНрдиреА, рдХреНрд░реЗрдЧрд▓рд┐рд╕реНрдЯ, рдлреЛрд░рд╕реНрдХреНрд╡реЗрдпрд░ рдЬреИрд╕реА рдХрдВрдкрдирд┐рдпреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрд╛рд░-рдмрд╛рд░ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛:
NoSQL MongoDB, NoRM рдФрд░ ASP.NET MVC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИрдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ MongoDB рд╕рд╛рдЭрд╛ рдХрд░рдирд╛рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ MongoDB рдкреНрд░рддрд┐рдХреГрддрд┐рдпрд╣ рдПрдХ .net рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ MongoDb рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рд▓реЗрдЦ рд╣реИред
рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
1. рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ (
http://www.mongodb.org/downloads ), рдЕрдирдЬрд╝рд┐рдк рдФрд░ рд░рди рдореЛрдВрдЧреЙрдб (рдпрд╣ рд╕рд░реНрд╡рд░ рд╣реИ)
2. рдбреНрд░рд╛рдЗрд╡рд░ (
https://github.com/mongodb/mongo-csharp-driver/downloads )
3. рдЪрд▓рд┐рдП
рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдирд╛ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдбреЗрдЯрд╛рдмреЗрд╕ c: / data / db рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ
Mongo.exe рдЪрд▓рд╛рдПрдБ рдФрд░ рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдБ:
use mongoblog
рдПрдХреНрд╕реЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб) рддреБрд░рдВрдд рд╕реЗрдЯ рдХрд░реЗрдВ:
db.addUser("admin", "masterkey")
MongoDb рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝-рдЙрдиреНрдореБрдЦ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреБрд░рдВрдд рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╕рдВрд╕реНрдерд╛рдПрдБ рд╣реЛрдВрдЧреА, рдЕрдиреБрдЪреНрдЫреЗрдж рдФрд░ рдЯрд┐рдкреНрдкрдгреА, рдФрд░ рдЕрдиреБрдЪреНрдЫреЗрдж рдореЗрдВ рдХрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреА:
public partial class Article { [BsonId] public ObjectId Id { get; set; }
рдЕрдЧрд▓рд╛, MongoDB рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- рдореЛрдВрдЧреЛ рд╕реЗ рд╕рдВрдмрдВрдз
- рд▓реЗрдЦ рдЬреЛрдбрд╝рдирд╛
- рд▓реЗрдЦ рдкрд░рд┐рд╡рд░реНрддрди
- рдЕрдиреБрдХреНрд░рдордг
- рд▓реЗрдЦ рд╣рдЯрд╛рдПрдБ
- рд▓реЗрдЦреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди (рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ / рдкреЗрдЬрд┐рдВрдЧ / рдЫрдБрдЯрд╛рдИ)
- рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ
- рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣рдЯрд╛рдПрдВ
- рдЦреЛрдЬ
- рдмреИрдХрдЕрдк рдЖрдзрд╛рд░
# 1 рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рдиред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдкрд░ 27017 рдкреЛрд░реНрдЯ рд░рдЦрддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рд╣реИ)ред рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:
public MongoDBContext(string ConnectionString, string User, string Password, string Database) { var mongoUrlBuilder = new MongoUrlBuilder(ConnectionString); server = MongoServer.Create(mongoUrlBuilder.ToMongoUrl()); MongoCredentials credentials = new MongoCredentials(User, Password); database = server.GetDatabase(Database, credentials); }
# 2 / # 3 рд░рд┐рдХреЙрд░реНрдб рдЬреЛрдбрд╝рдирд╛ / рдмрджрд▓рдирд╛
рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдирд╛рдо рд╕реЗ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
var collection = database.GetCollection<T>(table);
рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
collection.Insert<T>(obj);
рдпрд╛ (рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП)
collection.Save<T>(obj);
MongoDb рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ _id рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИ - рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкреИрд░рд╛рдореАрдЯрд░ред рдпрджрд┐ рд╕реЗрд╡ рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░, рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдореМрдЬреВрджрд╛ рдЖрдИрдбреА рд╣реИ, рддреЛ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
# 4 рдЕрдиреБрдХреНрд░рдордг
рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
collection.EnsureIndex(IndexKeys.Descending("AddedDate"));
рдпрд╣ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЫрдБрдЯрд╛рдИ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдПрдЧрд╛ред
# 5 рд╣рдЯрд╛рдирд╛
рдЖрдИрдбреА рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреНрд╡реЗрд░реА (рдХреНрд╡реЗрд░реА) рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╣реИ
var query = Query.EQ("_id", id)
рдФрд░ рдЖрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
collection.Remove(query);
# 6 рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдЦ
рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЫрд╛рдБрдЯреЗ рдЧрдП рдХрд░реНрд╕рд░ рдХреЗ рд╕рд╛рде рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдЕрдирд┐рд░реНрдзрд╛рд░рд┐рдд (IsDeleted = false) рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реЛрд╣реА рддрд┐рдерд┐ (резреж рддрд╛рд░реАрдЦ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЫрд╛рдВрдЯрд╛ рдЧрдпрд╛ (рд╣рдо резреж рдЖрдЗрдЯрдо рдЫреЛрдбрд╝ рдХрд░ рдЕрдЧрд▓реЗ резреж рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ), рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реНрд╕рд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
var cursor = collection.Find(Query.EQ("IsDeleted", false)); cursor.SetSortOrder(SortBy.Descending("AddedDate")); cursor.Skip = 90; cursor.Limit = 10; foreach (var obj in cursor) { yield return obj; }
# 7 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рдирд╛ред
рдЪреВрдВрдХрд┐ MongoDb рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝-рдЙрдиреНрдореБрдЦ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЯрд┐рдкреНрдкрдгреА рд▓реЗрдЦ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд▓реЗрдЦ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ:
var article = db.GetByID<Article>("Articles", articleId); comment.AddedDate = DateTime.Now; article.Comments.Add(comment); db.Save<Article>("Articles", article);
# 8 рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣рдЯрд╛рдПрдБред
рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред рд╣рдо рд▓реЗрдЦ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рд╡рд░реНрддрдорд╛рди рдЯрд┐рдкреНрдкрдгреА рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╕реНрддреБ рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВред
# 9 рдЦреЛрдЬред
рджрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
Query.Matches("Text", @".* .*").
рдЦреЛрдЬ рдХреЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ 2 рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рдкреЗрдЯреНрдпрд╛! = рдкреЗрдЯреНрдпрд╛, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВред
рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛрдиреЛрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдмрд▓реНрдХ рдлреАрд▓реНрдб рдмрдирд╛рдпрд╛, рдЬрд╣рд╛рдБ рд╕рднреА рдлрд╝реАрд▓реНрдбреНрд╕ + рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдирд┐рдЪрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдореИрдВ рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдБред
# 10 рдмреИрдХрдЕрдк рдЖрдзрд╛рд░ред
рдпрд╣ рдмреИрдХрдЕрдк рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдирд╣реАрдВ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛, рдХреЗрд╡рд▓ рдЙрд╕реА рд╕рдордп рд╕рднреА рд▓реЗрдЦрди рдХрдорд╛рдВрдб рдХреЛ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ)ред рдлрд┐рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХреЙрдкреА, рд╕рдВрдЧреНрд░рд╣реАрдд рдФрд░ рдПрдлрд╝рдЯреАрдкреА рдкрд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЕрдирд▓реЙрдХ (рдЕрдирд▓реЙрдХ) рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЯреАрдореЗрдВ:
public void Lock() { var command = new CommandDocument(); command.Add("fsync", 1); command.Add("lock", 1); var collection = server.AdminDatabase.RunCommand(command); } public void Unlock() { var collection = server.AdminDatabase.GetCollection("$cmd.sys.unlock"); collection.FindOne(); }
рдпрджрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
mongod --repair
рд╕реНрд░реЛрдд рдХреЛрдб
рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди (asp.net mvc рдкрд░) рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
https://bitbucket.org/chernikov/mongodbblogрд╣рд╛рдВ, рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╣рд╛рдВ
рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред