我正在使用 MongoDB CSharp 驱动程序来检索数据集合。不幸的是,其中一些数据不是很“干净”,因为某些字段同时是字符串和整数。正如预期的那样,反序列化过程每次遇到与正确类型不匹配的数据时都会引发异常。
我在网络上以及 StackOverflow 上进行了广泛的搜索,但都没有成功。有没有办法在反序列化时简单地处理/忽略异常并移至下一条记录?
我的代码看起来与此类似:
MongoClient client = new MongoClient(MongoConnectionString);
MongoServer server = client.GetServer();
MongoDatabase database = server.GetDatabase(DatabaseName);
MongoCollection<BookingLines> bookingLines = database.GetCollection<BookingLines>("bookinglines");
var query = from e in bookingLines.AsQueryable() where e.Status != "void" select e;
Run Code Online (Sandbox Code Playgroud)
该代码通常会在上面的最后一行抛出错误。我还尝试将 [BsonIgnore] 属性添加到某些字段。
任何想法或建议都会非常有帮助。
如何使用 MongoDB-Csharp 驱动程序编写以下查询
SELECT SubSet.*
FROM ( SELECT T.ProductName ,
T.Price ,
ROW_NUMBER() OVER ( PARTITION BY T.ProductName ORDER BY T.ProductName ) AS ProductRepeat
FROM myTable T
) SubSet
WHERE SubSet.ProductRepeat = 1
Run Code Online (Sandbox Code Playgroud)
我想要实现的是
收藏
预期结果是
这是一次尝试(请不要使用对象和字段)
public List<ProductOL> Search(ProductOL obj, bool topOneOnly)
{
List<ProdutOL> products = new List<ProductOL>();
var database = MyMongoClient.Instance.OpenToRead(dbName: ConfigurationManager.AppSettings["MongoDBDefaultDB"]);
var collection = database.GetCollection<RawBsonDocument>("Products");
List<IMongoQuery> build = new List<IMongoQuery>();
if (!string.IsNullOrEmpty(obj.ProductName))
{
var ProductNameQuery = Query.Matches("ProductName", new BsonRegularExpression(obj.ProductName, …Run Code Online (Sandbox Code Playgroud) 来自https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#up。S [%3C标识符%3E]
给定以下集合
{
"_id" : 1,
"grades" : [
{ "grade" : 80, "mean" : 75, "std" : 6 },
{ "grade" : 85, "mean" : 90, "std" : 4 },
{ "grade" : 85, "mean" : 85, "std" : 6 }
]
}
{
"_id" : 2,
"grades" : [
{ "grade" : 90, "mean" : 75, "std" : 6 },
{ "grade" : 87, "mean" : 90, "std" : 3 },
{ "grade" : 85, …Run Code Online (Sandbox Code Playgroud) 我正在使用官方 C# MongoDb 强类型驱动程序版本 2.5.0 与 MongoDB 交互。
我有一个经度和纬度坐标数组,我想将它们存储在 MongoDB 中。
用于存储坐标数组的类的名称是什么?所以我最近可以执行以下查询,检查如果给定坐标靠近坐标数组中的任何点,如何实现这一点?
这是演示该问题的简单代码。
var coordinates = new List<(double latitude, double longitude)>();
//Store coordinates array in the database
(double latitude, double longitude) point = (-33.847927, 150.6517805);
int maxDistance = 300;//Max Distance in meters
//Check if any point in the coordinates array is 300 m near the given point
Run Code Online (Sandbox Code Playgroud)
编辑:-
根据下面@CodeFuller评论中提到的这个问题:-
数组上的 MongoDB 地理空间索引(多键 + 地理空间)
MongoDB 不支持数组上的地理空间索引,因此请考虑以下类:
class SomeDocument {
public ObjectId Id { get; set; }
public string Title { …Run Code Online (Sandbox Code Playgroud) 我有一个清单BsonDocument:
var list = db.GetCollection<BsonDocument>(collectionName);
var myIds = list.Find(_ => true)
.Project(Builders<BsonDocument>.Projection.Include("_id"))
.ToList();
Run Code Online (Sandbox Code Playgroud)
其中包含:
Run Code Online (Sandbox Code Playgroud)myIds = "{ { "_id" : "cc9d9282-c9d2-4cba-a776-ffddsds274d5" }, { "_id" : "2c1ddd82-c9d2-4dda-afr6-d79ff1274d56" }, { "_id" : "ss969281-c9d2-4cba-a776-d79ffds274d5" } }"
并想这样查询:
var deleted =list.DeleteMany(Builders<MessageExchange>.Filter.In("_id", myIds));
Run Code Online (Sandbox Code Playgroud)
我也尝试过以下方法:
var filter = new BsonDocument("_id", new BsonDocument("$in", new BsonArray(myIds)));
var deleted = list.DeleteMany(filter);
Run Code Online (Sandbox Code Playgroud)
返回属性DeletedCount = 0
有人能指出过滤器似乎有什么问题吗?
我正在尝试按集合中的多个属性对文档进行类型安全的分组。我发现问题不在于按多个属性本身进行分组,而是键是对象 ( new { }) 而不是字符串。
这有效:
collection.Aggregate().Group(x => x.Name, x => new { Name = x.Key, Count = x.Sum(s => 1) }).ToList();
Run Code Online (Sandbox Code Playgroud)
这不起作用:
collection.Aggregate().Group(x => new { Name = x.Name }, x => new { Name = x.Key.Name, Count = x.Sum(s => 1) }).ToList();
Run Code Online (Sandbox Code Playgroud)
错误是:
MongoDB.Driver.MongoCommandException:“命令聚合失败:字段“名称”必须是累加器对象。
当我将不起作用的查询转换为字符串时,我得到以下信息:
aggregate([{ "$group" : { "_id" : { "Name" : "$Name" }, "Name" : "$_id.Name", "Count" : { "$sum" : 1 } } }])
Run Code Online (Sandbox Code Playgroud)
我想这里的问题是这部分"Name" : "$_id.Name"。我该如何解决这个问题?
我目前使用的是 2.8.0 版的 …
c# mongodb aggregation-framework .net-core mongodb-.net-driver
我只想更新文档的一个字段。我的意思是理解我必须使用UpdateOneAsync. 当我尝试这样做时,我总是得到MongoDB.Bson.BsonSerializationException : Element name 'Test' is not valid'..
以下代码重现了我的问题(xUnit、.NET Core、Docker 中的 MongoDb)。
public class Fixture
{
public class DummyDocument : IDocument
{
public string Test { get; set; }
public Guid Id { get; set; }
public int Version { get; set; }
}
[Fact]
public async Task Repro()
{
var db = new MongoDbContext("mongodb://localhost:27017", "myDb");
var document = new DummyDocument { Test = "abc", Id = Guid.Parse("69695d2c-90e7-4a4c-b478-6c8fb2a1dc5c") };
await db.GetCollection<DummyDocument>().InsertOneAsync(document);
FilterDefinition<DummyDocument> u = new …Run Code Online (Sandbox Code Playgroud) 如何使用官方c#驱动程序在mongodb中执行以下SQL查询?
Select * from tblUser where FirstName Like '%as%'
Run Code Online (Sandbox Code Playgroud) 当我在分片群集上的批量插入上使用安全模式(仅限日记)时,结果将作为C#驱动程序上的SafeModeResult列表返回(我假设它在其他驱动程序上也类似).列表中的每个结果意味着什么?
它是批处理中的每个项目还是每个分片,还是每个消息发送到服务器?
批量插入是原子的还是不是专门在分片环境中?如果没有,我怎么知道我的批次哪个部分失败了?
我是Mongo Db的新手并试图写一些查询.
我需要获取其品牌价值不等于"any"或"none"或包含"not"的产品列表.
我尝试了一些这样的东西,但它不起作用.
var query = { "BarCode": { "$exists": 1,"$not":"any" }};
Run Code Online (Sandbox Code Playgroud)
但它几乎没有错误.有人能帮助我吗
谢谢,
纳雷什