SqlSugar/Src/Asp.NetCore2/MongoDbTest/AdoTest.cs

368 lines
16 KiB
C#
Raw Normal View History

2025-04-26 15:50:22 +08:00
using MongoDb.Ado.data;
using MongoDB.Bson;
using MongoDB.Driver;
2025-05-04 15:59:46 +08:00
using MongoDbTest.DBHelper;
2025-04-26 15:50:22 +08:00
using System;
using System.Collections.Generic;
2025-05-01 14:01:35 +08:00
using System.Data;
2025-04-26 15:50:22 +08:00
using System.Linq;
using System.Text;
using System.Threading.Tasks;
2025-05-02 14:30:13 +08:00
using static System.Net.Mime.MediaTypeNames;
2025-04-26 15:50:22 +08:00
namespace MongoDbTest
{
public class AdoTest
{
2025-04-26 19:34:30 +08:00
public static void Init()
{
MongoClientTest();
MongoDbConnectionTest();
2025-05-01 14:01:35 +08:00
MongoDbCommandTest();
2025-05-02 17:16:05 +08:00
MongoDbCommandTestAsync().GetAwaiter().GetResult();
2025-05-01 14:01:35 +08:00
}
2025-05-02 17:16:05 +08:00
#region MongoDbCommandTest
2025-05-01 14:01:35 +08:00
private static void MongoDbCommandTest()
2025-05-02 14:30:13 +08:00
{
2025-05-02 17:16:05 +08:00
DataReaderTest();
2025-05-02 14:30:13 +08:00
DataTableTest();
ExecuteScalarTest();
ExecuteNonQueryTest();
}
private static void ExecuteNonQueryTest()
{
//ExecuteNonQuery insert
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
MongoDbCommand mongoDbCommand = new MongoDbCommand(
"insert b { name: \"John\", age: 31 }",
connection);
var value = mongoDbCommand.ExecuteNonQuery();
connection.Close();
}
//ExecuteNonQuery insertMany
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
MongoDbCommand mongoDbCommand = new MongoDbCommand(" insertMany b [{ name: \"John\", age: 31 }, { name: \"Alice\", age: 25 }, { name: \"Bob\", age: 30 } ] ", connection);
var value = mongoDbCommand.ExecuteNonQuery();
connection.Close();
}
//ExecuteNonQuery update
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
MongoDbCommand mongoDbCommand = new MongoDbCommand(
@"update b {
""filter"": { ""name"": ""John"" },
""update"": { ""$set"": { ""age"": 32 } }
}",
connection);
var value = mongoDbCommand.ExecuteNonQuery();
connection.Close();
}
//ExecuteNonQuery updateMany
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
MongoDbCommand mongoDbCommand = new MongoDbCommand(
@"updateMany b [{
""filter"": { ""name"": ""John"" },
""update"": { ""$set"": { ""age"": 32 } }
}]",
connection);
var value = mongoDbCommand.ExecuteNonQuery();
connection.Close();
}
//ExecuteNonQuery delete
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
MongoDbCommand mongoDbCommand = new MongoDbCommand(
"delete b {\"filter\":{ name: \"John\" }}",
connection);
var value = mongoDbCommand.ExecuteNonQuery();
connection.Close();
}
//ExecuteNonQuery delete
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
MongoDbCommand mongoDbCommand = new MongoDbCommand(
"delete b {\"filter\":{ name: \"John\" }}",
connection);
var value = mongoDbCommand.ExecuteNonQuery();
connection.Close();
}
//ExecuteNonQuery deleteMany
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
MongoDbCommand mongoDbCommand = new MongoDbCommand(
"deleteMany b [{\"filter\":{ name: \"John\" }}]",
connection);
var value = mongoDbCommand.ExecuteNonQuery();
connection.Close();
}
//ExecuteNonQuery Find
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
MongoDbCommand mongoDbCommand = new MongoDbCommand(
" find b { age: { $gt: 31 } }",
connection);
var value = mongoDbCommand.ExecuteNonQuery();
connection.Close();
}
}
private static void DataTableTest()
{
2025-05-02 14:54:14 +08:00
//datatable
2025-05-02 14:30:13 +08:00
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
////SELECT * FROM b ORDER BY age DESC OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY;
MongoDbCommand mongoDbCommand = new MongoDbCommand(" aggregate b [\r\n { \"$sort\": { \"age\": -1 } },\r\n { \"$skip\": 1 },\r\n { \"$limit\": 2 }\r\n] ]", connection);
MongoDbDataAdapter mongoDbDataAdapter = new MongoDbDataAdapter();
mongoDbDataAdapter.SelectCommand = mongoDbCommand;
DataTable dt = new DataTable();
mongoDbDataAdapter.Fill(dt);
connection.Close();
}
2025-05-02 14:54:14 +08:00
//dataset
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
////SELECT * FROM b ORDER BY age DESC OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY;
MongoDbCommand mongoDbCommand = new MongoDbCommand(" aggregate b [\r\n { \"$sort\": { \"age\": -1 } },\r\n { \"$skip\": 1 },\r\n { \"$limit\": 2 }\r\n] ]", connection);
MongoDbDataAdapter mongoDbDataAdapter = new MongoDbDataAdapter();
mongoDbDataAdapter.SelectCommand = mongoDbCommand;
DataSet ds = new DataSet();
mongoDbDataAdapter.Fill(ds);
connection.Close();
}
2025-05-02 14:30:13 +08:00
}
private static void ExecuteScalarTest()
{
//ExecuteScalar
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
MongoDbCommand mongoDbCommand = new MongoDbCommand(" find b { age: { $gt: 31 } }", connection);
var value = mongoDbCommand.ExecuteScalar();
connection.Close();
2025-05-02 17:16:05 +08:00
}
2025-05-02 14:30:13 +08:00
private static void DataReaderTest()
2025-05-01 14:01:35 +08:00
{
2025-05-02 11:39:41 +08:00
//ExecuteReader single query 1
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
//对应的SQL: SELECT * FROM b WHERE age > 18;
MongoDbCommand mongoDbCommand = new MongoDbCommand(" find b { age: { $gt: 32 } } ", connection);
using (var reader = mongoDbCommand.ExecuteReader())
{
while (reader.Read())
{
var name = reader.GetString("name");
var age = reader.GetInt32("age");
}
}
connection.Close();
}
//ExecuteReader single query 2
2025-05-02 14:30:13 +08:00
{
2025-05-02 11:39:41 +08:00
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
//对应的SQL: SELECT name, age, _id FROM b WHERE age > 18;
MongoDbCommand mongoDbCommand = new MongoDbCommand(" find b [{ age: { $gt: 18 } }, { name: 1, age: 1 }]", connection);
using (var reader = mongoDbCommand.ExecuteReader())
{
while (reader.Read())
{
var name = reader.GetString("name");
var age = reader.GetInt32("age");
}
}
connection.Close();
}
//ExecuteReader single query 3
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
2025-05-02 14:30:13 +08:00
//SELECT * FROM b ORDER BY age DESC OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY;
2025-05-02 11:44:42 +08:00
MongoDbCommand mongoDbCommand = new MongoDbCommand(" aggregate b [\r\n { \"$sort\": { \"age\": -1 } },\r\n { \"$skip\": 1 },\r\n { \"$limit\": 2 }\r\n] ]", connection);
2025-05-02 11:39:41 +08:00
using (var reader = mongoDbCommand.ExecuteReader())
{
while (reader.Read())
{
var name = reader.GetString("name");
var age = reader.GetInt32("age");
}
}
connection.Close();
}
//ExecuteReader join query
{
2025-05-02 11:49:57 +08:00
//SELECT b1._id, b1.a_id, b2.some_field AS joined_field
// FROM b AS b1
//LEFT JOIN b AS b2 ON b1.a_id = b2._id
//WHERE b2.some_field > 100
//ORDER BY b2.some_field DESC
// LIMIT 20 OFFSET 10;
2025-05-01 14:09:30 +08:00
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
connection.Open();
2025-05-02 11:49:57 +08:00
MongoDbCommand mongoDbCommand = new MongoDbCommand(@" aggregate b [
{
""$lookup"": {
""from"": ""b"",
""localField"": ""a_id"",
""foreignField"": ""_id"",
""as"": ""joined_docs""
}
},
{
""$unwind"": ""$joined_docs""
},
{
""$match"": {
""joined_docs.some_field"": { ""$gt"": 100 }
}
},
{
""$project"": {
""_id"": 1,
""a_id"": 1,
""joined_field"": ""$joined_docs.some_field""
}
}
])", connection);
2025-05-01 14:09:30 +08:00
using (var reader = mongoDbCommand.ExecuteReader())
2025-05-01 14:01:35 +08:00
{
2025-05-01 14:09:30 +08:00
while (reader.Read())
{
var name = reader.GetString("name");
var age = reader.GetInt32("age");
}
2025-05-01 14:01:35 +08:00
}
2025-05-01 14:09:30 +08:00
connection.Close();
}
2025-04-26 19:34:30 +08:00
}
2025-05-02 17:16:05 +08:00
#endregion
#region MongoDbCommandTestAsync
private static async Task MongoDbCommandTestAsync()
{
await DataReaderTestAsync();
await DataTableTestAsync();
await ExecuteScalarTestAsync();
await ExecuteNonQueryTestAsync();
}
private static async Task ExecuteNonQueryTestAsync()
{
// ExecuteNonQueryAsync insert
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
await connection.OpenAsync();
MongoDbCommand mongoDbCommand = new MongoDbCommand(
"insert b { name: \"John\", age: 31 }",
connection);
var value = await mongoDbCommand.ExecuteNonQueryAsync();
connection.Close();
}
// ExecuteNonQueryAsync insertMany
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
await connection.OpenAsync();
MongoDbCommand mongoDbCommand = new MongoDbCommand(
"insertMany b [{ name: \"John\", age: 31 }, { name: \"Alice\", age: 25 }, { name: \"Bob\", age: 30 }]",
connection);
var value = await mongoDbCommand.ExecuteNonQueryAsync();
connection.Close();
}
// ExecuteNonQueryAsync update
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
await connection.OpenAsync();
MongoDbCommand mongoDbCommand = new MongoDbCommand(
@"update b {
""filter"": { ""name"": ""John"" },
""update"": { ""$set"": { ""age"": 32 } }
}",
connection);
var value = await mongoDbCommand.ExecuteNonQueryAsync();
connection.Close();
}
// 其他类似的异步测试方法...
}
private static async Task ExecuteScalarTestAsync()
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
await connection.OpenAsync();
MongoDbCommand mongoDbCommand = new MongoDbCommand("find b { age: { $gt: 31 } }", connection);
var value = await mongoDbCommand.ExecuteScalarAsync();
connection.Close();
}
private static async Task DataReaderTestAsync()
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
await connection.OpenAsync();
MongoDbCommand mongoDbCommand = new MongoDbCommand("find b { age: { $gt: 32 } }", connection);
using (var reader = await mongoDbCommand.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
var name = reader.GetString("name");
var age = reader.GetInt32("age");
}
}
connection.Close();
}
private static async Task DataTableTestAsync()
{
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
await connection.OpenAsync();
MongoDbCommand mongoDbCommand = new MongoDbCommand(
"aggregate b [ { \"$sort\": { \"age\": -1 } }, { \"$skip\": 1 }, { \"$limit\": 2 } ]",
connection);
MongoDbDataAdapter mongoDbDataAdapter = new MongoDbDataAdapter();
mongoDbDataAdapter.SelectCommand = mongoDbCommand;
DataTable dt = new DataTable();
await Task.Run(() => mongoDbDataAdapter.Fill(dt)); // 模拟异步操作
connection.Close();
}
#endregion
2025-04-26 19:34:30 +08:00
private static void MongoDbConnectionTest()
{
var db= new MongoDbConnection(DbHelper.SqlSugarConnectionString);
var database= db.GetDatabase();
var collections = database.GetCollection<BsonDocument>("b");
// 插入一个文档MongoDB 会创建数据库和集合
2025-05-01 14:01:35 +08:00
var document = new BsonDocument { { "name", "bbbbbb" }, { "age", 40 } };
2025-04-26 19:34:30 +08:00
collections.InsertOne(document);
var list = collections.AsQueryable<BsonDocument>().ToList();
}
private static void MongoClientTest()
2025-04-26 15:50:22 +08:00
{
//开发中
2025-04-26 19:34:30 +08:00
var client = new MongoClient(DbHelper.ConnectionString);
var database = client.GetDatabase("SqlSugarDb");
2025-04-26 15:50:22 +08:00
// 获取当前数据库中的所有集合
2025-04-26 19:34:30 +08:00
var collections = database.GetCollection<BsonDocument>("a");
// 插入一个文档MongoDB 会创建数据库和集合
var document = new BsonDocument { { "name", "aaaa" }, { "age", 30 } };
collections.InsertOne(document);
var list = collections.AsQueryable<BsonDocument>().ToList();
2025-04-26 15:50:22 +08:00
}
}
}