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