Popular blog tags

MongoDB C# Driver-Document

Published

MongoDB stores data in JSON Documents. Actually, they are stored as Binary JSON (BSON) objects on disk

Data

{
    "_id": { "$oid":"56d5f7eb604eb380b0d8d8ce" },
    "student_id":{ "$numberDouble": "0" },
    "scores":[
        {"type":"exam","score": {"$numberDouble": "78.40446309504266" }},
        {"type":"quiz","score": {"$numberDouble": "73.36224783231339" }},
        {"type":"homework","score": {"$numberDouble": "46.980982486720535" }},
        {"type":"homework","score": {"$numberDouble": "76.67556138656222" }}
    ],
    "class_id":{"$numberDouble": "339"}
}

Connecting to a Specific Collection

using System;
using MongoDB.Bson;
using MongoDB.Driver;

namespace MongoDBCRUDExample {
    class Program {
        static void Main (string[] args) {
            MongoClient dbClient = new MongoClient ( << YOUR ATLAS CONNECTION STRING >>);

            var database = dbClient.GetDatabase ("sample_training");
            var collection = database.GetCollection<BsonDocument> ("grades");

        }
    }
}

1.Creating a BSON Document

var document = new BsonDocument { { "student_id", 10000 }, {
                "scores",
                new BsonArray {
                new BsonDocument { { "type", "exam" }, { "score", 88.12334193287023 } },
                new BsonDocument { { "type", "quiz" }, { "score", 74.92381029342834 } },
                new BsonDocument { { "type", "homework" }, { "score", 89.97929384290324 } },
                new BsonDocument { { "type", "homework" }, { "score", 82.12931030513218 } }
                }
                }, { "class_id", 480 }
        };

 await collection.InsertOneAsync (document);

2.Update a BSON Document

2.1 Update a single field

var filter = Builders<BsonDocument>.Filter.Eq("student_id", 10000)
var update = Builders<BsonDocument>.Update.Set("class_id", 483);
ollection.UpdateOne(filter, update);

2.2 Update Array

var arrayFilter = Builders<BsonDocument>.Filter.Eq("student_id", 10000) 
     & Builders<BsonDocument>.Filter.Eq("scores.type", "quiz");

var arrayUpdate = Builders<BsonDocument>.Update.Set("scores.$.score", 84.92381029342834);
collection.UpdateOne(arrayFilter , arrayUpdate);

3.Read document

var firstDocument = collection.Find(new BsonDocument()).FirstOrDefault();
Console.WriteLine(firstDocument.ToString());

output

{ "_id" : ObjectId("56d5f7eb604eb380b0d8d8ce"), 
"student_id" : 0.0, 
"scores" : [
{ "type" : "exam", "score" : 78.404463095042658 },
{ "type" : "quiz", "score" : 73.362247832313386 }, 
{ "type" : "homework", "score" : 46.980982486720535 }, 
{ "type" : "homework", "score" : 76.675561386562222 }
], 
"class_id" : 339.0 }

https://www.mongodb.com/blog/post/quick-start-c-and-mongodb--read-operations

4.delete document

//define the filter to match the student_id equal to 10000 document
var deleteFilter = Builders<BsonDocument>.Filter.Eq("student_id", 10000);
collection.DeleteOne(deleteFilter);

ElemMatch

//define a  filter to match the exam score being less than 60:
var deleteLowExamFilter = Builders<BsonDocument>.Filter.ElemMatch<BsonValue>("scores",
     new BsonDocument { { "type", "exam" }, {"score", new BsonDocument { { "$lt", 60 }}}
});

collection.DeleteMany(deleteLowExamFilter);

 

5.Query with multi filter

//step 1:Connect
var db = server.GetDatabase(bsDatabase.Current as string);
var collection = db.GetCollection(bsCollections.CurrencyManager.Current as string);
var allLevel = collection.Distinct("level");

//step 2:query 
//query 1
var query = Query.And(
                    Query.EQ("level", "ERROR"),
                    Query.Or(
                        Query.EQ("loggerName", "classa"),
                        Query.EQ("loggerName", "classb")
                    )
                );

//query 2
List<IMongoQuery> mainQueries = new List<IMongoQuery>();
if (!String.IsNullOrWhiteSpace(cmbLevel.Text))
{
    mainQueries.Add(Query.EQ("level", cmbLevel.Text));
}
if (cbList.CheckedIndices.Count > 0)
{
    List<IMongoQuery> listOfLoggerNameQueries = new List<IMongoQuery>();
 
    foreach (Int32 index in cbList.CheckedIndices)
    {
        String value = cbList.Items[index].ToString();
        listOfLoggerNameQueries.Add(Query.EQ("loggerName", value));
    }
    mainQueries.Add(Query.Or(listOfLoggerNameQueries.ToArray()));
}

//final query 
var finalQuery = Query.And(mainQueries.ToArray());


//search 
var cursor = collection.Find(finalQuery);
Int32 limit;
if (!Int32.TryParse(txtLogNum.Text, out limit))
{
    limit = 50;
}
cursor.SetFields("level", "loggerName", "message", "exception", "customproperties", "timestamp");
cursor.SetSortOrder(SortBy.Descending("timestamp"));
cursor.Limit = limit;

 

 var mongoString = "mongodb://jamesbing:123456@localhost:27017";
 2             var host = new TMongodbHostModel
 3             {
 4                 CollectionName = "ft_test",
 5                 ConnectionString = mongoString,
 6                 DatabaseName = "system_db"
 7             };
 8 
 9             var person = new Person
10             {
11                 Id = ObjectId.GenerateNewId(),
12                 Name = "jamesbing",
13                 Address = new List<AddressItem>
14                 {
15                     new AddressItem {Add = "英国", Id = ObjectId.GenerateNewId(), Age = 12},
16                     new AddressItem {Add = "美国", Id = ObjectId.GenerateNewId(), Age = 19}
17                 }
18             };
19             //  var addresult = TMongodbHelper.Add(host, person);
20             var collection = TMongodbHelper.GetMongoCollection<Person>(host.ConnectionString, host.DatabaseName, host.CollectionName);
21 
22             //Update ChildDocument
23             var address = "Address.$";
24             var result = collection.Update(
25                 Query.And(new List<IMongoQuery>
26                 {
27                    Query.EQ("_id", new ObjectId("577b344a87aebb23c0fc767a")),
28                     Query.EQ("Address._id", new ObjectId("577b344a87aebb23c0fc767b")),
29                 }), Update.Set(address + ".Age", 33));
30 
31 
32             //Add ChildDocument
33             //单个
34             var result2 = collection.Update(Query.EQ("_id", new ObjectId("577b2d6787aebb198839d415")
35                ), Update.Push("Address", new AddressItem { Add = "山西省运城市", Id = ObjectId.GenerateNewId() }.ToBsonDocument()));
36 
37             //多个
38             var result3 = collection.Update(Query.EQ("_id", new ObjectId("577b262587aebb41fca9a3af")
39              ), Update.PushEach("Address", new[] { new AddressItem { Add = "山西省运城市4", Id = ObjectId.GenerateNewId(), Age = 10 }.ToBsonDocument(), new AddressItem { Add = "山西省运城市5", Id = ObjectId.GenerateNewId(), Age = 9 }.ToBsonDocument() }));
40 
41             //Remove ChildDocument
42             var result4 = collection.Update(Query.EQ("_id", new ObjectId("577b2d6787aebb198839d415")),
43                Update.Pull("Address", new { Id = new ObjectId("577b2d9387aebb2d7449367f") }.ToBsonDocument()));
44 
45 
46             //Query ChildDocument
47              var query = Query.EQ("_id", new ObjectId("577b30e087aebb34ec170e7a"));
                var q = Query.ElemMatch("Address"", Query.EQ("Add", "北京市"));     
                var result5= collection.FindOne(Query.And(query,q));  

https://www.cnblogs.com/gaobing/p/5667021.html

 

DateTime datetimestart =  new DateTime(2018, 5, 11, 14, 39, 33);
DateTime datetimeend =  new DateTime(2018, 5, 11, 14, 39, 40);
var filter1 = Builders<BsonDocument>.Filter.Eq("type", "ws128");
var filter2 = Builders<BsonDocument>.Filter.Gte("tsend", datetimeend);
var filter3 = Builders<BsonDocument>.Filter.Lt("tsend", datetimestart);

var andFilter = filter1 & filter2 & filter3;

var cursor = collection.Find(andFilter).ToCursor();

or
var cursor = collection.Find(filter1 & filter2 & filter3).ToCursor();

 

Projection

using System;
using System.Threading.Tasks;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Core;

namespace Projections
{
  class Program
  {
    static void Main(string[] args)
    {
       callMain(args).Wait();
       Console.ReadLine();
    }
    static async Task callMain(string[] args)
    {
      var conString = "mongodb://localhost:27017";
      var Client = new MongoClient(conString);
      var DB = Client.GetDatabase("test");
      var collection = DB.GetCollection<BsonDocument>("store");
      var list = await collection.Find(new BsonDocument()).Project(Builders<BsonDocument>.Projection.Include("Price").Exclude("_id")).ToListAsync();
      foreach (var doc in list)
      {
          Console.WriteLine(doc);
      }
    }
  }
}