我发现检查的方法是在简单数组中包含的值:
var filter = Builders<Post>.Filter.AnyEq(x => x.Tags, "mongodb");
Run Code Online (Sandbox Code Playgroud)
但是如何通过具体领域找到包含许多字段的复杂项目?我找到了通过点符号方法用BsonDocument
构建器编写它的方法,但是如何使用类型化的lambda符号呢?
UPD
我觉得它有点像
builderInst.AnyIn(p => p.ComplexCollection.Select(ml => ml.Id), mlIds)
Run Code Online (Sandbox Code Playgroud)
但现在无法检查,有人可以帮忙吗?
我有以下聚合pipline
var count = dbCollection.
Aggregate(new AggregateOptions { AllowDiskUse = true }).Match(query).
Group(groupby).
ToListAsync().Result.Count();
Run Code Online (Sandbox Code Playgroud)
这得到以下结果:
{
"result" : [
{
"_id" : {
"ProfileId" : ObjectId("55f6c727965bb016c81971ba")
}
},
{
"_id" : {
"ProfileId" : ObjectId("55f6c727965bb016c81971bb")
}
}
],
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
但它似乎会在客户端进行计数操作,但如何执行呢MongoDb
?我有MongoDb 2.0 C# driver
&MongoDb v. 3.0.2
如何通过使用IMongoCollection
接口的新C#MongoDb驱动程序重写以下旧代码:
var bulk = dbCollection.InitializeUnorderedBulkOperation();
foreach (var profile in profiles)
{
bulk.Find(Query.EQ("_id",profile.ID)).Upsert().Update(Update.Set("isDeleted", true));
}
bulk.Execute();
Run Code Online (Sandbox Code Playgroud)
如何Update
用Builder
机制创建操作对我来说很清楚,但如何执行更新批量操作?
我有以下查询
db.Profiles.find({ "$text" : { "$search" : "vk" } })
Run Code Online (Sandbox Code Playgroud)
它给了我以下结果
{
"_id" : ObjectId("55e999a5bd1f3926586799bb"),
"created" : ISODate("2015-09-04T13:16:21.555Z"),
"userId" : 4790,
"email" : "vk@mydomain.com",
"firstName" : "",
"lastName" : "",
"phoneNumber" : "",
"isUnsubscribed" : false,
"isAboveLimit" : true,
"status" : 0,
"userAgent" : 0,
"isDeleted" : false,
"p2l" : [
{
"listId" : 31613,
"status" : 25,
"subscriptionDate" : ISODate("2015-09-17T14:04:33.660Z")
}
],
"countryId" : 0,
"cf" : []
}
Run Code Online (Sandbox Code Playgroud)
但以下情况并非如此
db.Profiles.find({ "$text" : { "$search" : "v" }})
Run Code Online (Sandbox Code Playgroud)
没有结果.
我尝试status
从p2l
数组更新对象的字段
var update = Builders<BsonDocument>.Update.Set("p2l.$.status",BsonValue.Create(status))
Run Code Online (Sandbox Code Playgroud)
似乎代码可以正常工作,但如何使用类型化构建器实现它并使用lambda设置所有字段?我通过以下链接找到了解决方案 如何使用C#驱动程序更新MongoDB中数组子文档中包含的数组子文档中的字段?
但它仅适用于旧版本的驱动程序.
如何将 a 转换BsonDocument
为FilterDefinition<BsonDocument>
实例?
它是由新的 MongoDb C# 驱动程序提供的类。
我isDeleted
Nullable
在Profile
课堂上有财产.
Builders<Profile>.Filter.Eq(p => p.IsDeleted, BsonNull.Value)
Run Code Online (Sandbox Code Playgroud)
但是下面的代码引发了下一个编译错误:
Error 11 Cannot convert lambda expression to type
'MongoDB.Driver.FieldDefinition<MongoDB.DataTypes.Profile,MongoDB.Bson.BsonNull>'
because it is not a delegate type
Run Code Online (Sandbox Code Playgroud)
如何实现空检查?
我有以下代码实现MongoDb 2.0 c# driver
.但我需要访问将插入的MailLists
集合Profile
.我p
在构造函数中编写了预期的解决方案,但是如何通过多个操作实现它?
IMongoCollection<Profile> dbCollection = DetermineCollectionName<Profile>();
var filter = Builders<Profile>.Filter.In(x => x.ID, profiles.Select(x => x.ID));
var updateMl = Builders<Profile>.Update.AddToSet(p => p.MailLists, new Profile2MailList
{
MailListId = maillistId,
Status = p.MailLists.MergeMailListStatuses(),
SubscriptionDate = DateTime.UtcNow
});
dbCollection.UpdateManyAsync(filter, updateMl, new UpdateOptions { IsUpsert = true });
Run Code Online (Sandbox Code Playgroud) 是否有可能得到一个T-SQL的转换一个潜在的问题decimal(30,8)
,以decimal
在C#中?