使用MongoDB C#驱动程序如何在查询中包含多个字段(使用vb.net)
我知道怎么办(for name1=value1)
Dim qry = Query.EQ("name1","value1")
Run Code Online (Sandbox Code Playgroud)
我怎么能修改此查询,以便我可以把它找到的所有文件,其中 name1=value1和name2=value2?
( 相近 )
db.collection.find({"name1":"value1","name2":"value2"})
Run Code Online (Sandbox Code Playgroud) { "_id" : ObjectId("51ee3966e4b056fe8f074f48"), "userid" : "66", "clientid" : "88", "deviceid" : "22", "timestamp" : "1374214822000"}
{ "_id" : ObjectId("51ee507ae4b056fe8f074f4a"), "userid" : "66", "clientid" : "88", "deviceid" : "22", "timestamp" : "1374214822000"}
{ "_id" : ObjectId("51ee51fee4b056fe8f074f4b"), "userid" : "66", "clientid" : "88", "deviceid" : "22", "timestamp" : "1374214822000"}
Run Code Online (Sandbox Code Playgroud)
如何删除mongodb中的多个ID?
我是mongodb和堆栈溢出的新手.
我想知道为什么mongodb集合ID是24个十六进制字符?这有什么重要意义?
我有以下MongoDb查询工作:
db.Entity.aggregate(
[
{
"$match":{"Id": "12345"}
},
{
"$lookup": {
"from": "OtherCollection",
"localField": "otherCollectionId",
"foreignField": "Id",
"as": "ent"
}
},
{
"$project": {
"Name": 1,
"Date": 1,
"OtherObject": { "$arrayElemAt": [ "$ent", 0 ] }
}
},
{
"$sort": {
"OtherObject.Profile.Name": 1
}
}
]
)
Run Code Online (Sandbox Code Playgroud)
这将检索与另一个集合中的匹配对象连接的对象列表.
有没有人知道如何使用LINQ或使用这个确切的字符串在C#中使用它?
我尝试使用以下代码,但它似乎无法找到类型QueryDocument和MongoCursor- 我认为它们已被弃用?
BsonDocument document = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>("{ name : value }");
QueryDocument queryDoc = new QueryDocument(document);
MongoCursor toReturn = _connectionCollection.Find(queryDoc);
Run Code Online (Sandbox Code Playgroud) 我有一个特定的数据操作要求,我已经解决了如何在SQL Server和PostgreSQL中做.但是,我对速度不太满意,所以我正在调查MongoDB.
描述查询的最佳方法如下.描绘美国的分层数据:国家,州,县,市.假设一个特定的供应商可以为整个加州服务.另一个可能只服务于洛杉矶.可能有数十万个供应商,他们都可以从这个层次结构中的某些点进行服务.我并没有把它与Geo混淆 - 我用它来说明需要.
使用递归查询,可以很容易地获得可以为特定用户提供服务的所有供应商的列表.如果他是在说帕萨迪纳,美国加利福尼亚州洛杉矶,我们会走到层次得到应用的ID,然后查询回落,找到供应商.
我知道这可以优化.同样,这只是一个简单的查询示例.
我知道MongoDB是一个文档存储.这非常适合我的其他需求.问题是它对我描述的查询类型有多适合?(我知道它没有连接 - 这些是模拟的).
我知道这是一个"一段字符串多长时间"的问题.我只是想知道是否有任何人有使用MongoDB做这种事情的经验.从0到测试可能需要一段时间,如果MongoDB不适合这个,我希望节省时间.
例
当地的电影商店"A"可以在斯普林菲尔德供应Blu-Rays.具有全州分布的连锁店"B"可以向所有IL提供Blu-Rays.按需下载商店"C"可以供应给所有美国用户.
如果我们想要获得伊利诺斯州斯普林菲尔德的所有适用电影供应商,那么答案将是[A,B,C].
换句话说,在层次结构上有许多不同级别的供应商.
我对MongoDB和NoSQL很新,我刚刚开始使用MongoDB/Norm/ASP.NET MVC 3构建一个站点.
我想知道我应该如何确定与Mongo数据库的连接.
现在我有一个Basecontroller,它实现了MongoSession和onActionExecuted我处理它所以我所有的派生控制器都可以访问我的MongoSession.MongoSession类在其构造函数中打开一个连接,并将它放在Dispose()上,就像它今天的工作方式一样.
private IMongo _mongo;
public MongoSession()
{
_mongo = Mongo.Create("connString");
}
public void Dispose()
{
_mongo.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
如果我在控制器中做其他事情,我有点担心它可能会持续打开太长时间.
这种方法是否应该不会冒太多连接的风险,或者我应该做更像下面的示例方法?
public void Add<T>(T item) where T : class, new()
{
using (var mongo = Mongo.Create("connString"))
{
mongo.GetCollection<T>().Insert(item);
}
}
Run Code Online (Sandbox Code Playgroud)
另一个跟进问题是:
通过Norm"昂贵"操作打开和关闭MongoDB连接?
database-connection scoping mongodb norm mongodb-.net-driver
应用程序在Mongo中保留Guid字段,最终存储为BinData:
"_id" : new BinData(3, "WBAc3FDBDU+Zh/cBQFPc3Q==")
Run Code Online (Sandbox Code Playgroud)
在这种情况下的优点是紧凑性,当需要对应用程序进行故障排除时会出现缺点.Guids通过URL传递,并且在转到Mongo控制台时不断将它们转换为BinData有点痛苦.
除了增加尺寸外,将Guid存储为字符串有什么缺点?一个优点是易于故障排除:
"_id" : "3c901cac-5b90-4a09-896c-00e4779a9199"
Run Code Online (Sandbox Code Playgroud)
这是C#中持久化实体的原型:
class Thing
{
[BsonIgnore]
public Guid Id { get; set; }
[BsonId]
public string DontUseInAppMongoId
{
get { return Id.ToString(); }
set { Id = Guid.Parse(value); }
}
}
Run Code Online (Sandbox Code Playgroud) 我正在更新一个简单的字段.
var filterDocument = new BsonDocument { { "name", "alice" } };
var newDocument = new BsonDocument { { "name", "Alice" } };
collection.UpdateOne(filterDocument, newDocument);
Run Code Online (Sandbox Code Playgroud)
但是当我到达更新语句时,我得到一个例外 {"Element name 'name' is not valid'."}
这个元素名称有什么问题?
更新
重写它:
var filterDocument = new BsonDocument { { "x", "alice" } };
var newDocument = new BsonDocument { { "y", "Alice" } };
collection.UpdateOne(filterDocument, newDocument);
Run Code Online (Sandbox Code Playgroud)
抛出异常 {"Element name 'y' is not valid'."}
此外,UpdateOne()或UpdateMany()没有任何区别.
另外,从外壳来看它很好.
> db.crud.update({name:'alice'},{name:'Alice'})
WriteResult({ "nMatched" : 1, "nUpserted" : …Run Code Online (Sandbox Code Playgroud) mongodb的:// USER:PASS@MYMONGO1.com:1234,MYMONGO2.com:1234/DB_NAME replicaSet = REPLICA_SET_NAME
每天一次我记录这个集合的特定计数(每次都有相同的参数):
db.Products({"Package": "Box"}).count()
// actual code running in C#:
productsCollection.Find(p => p.Package == "Box").Count()
Run Code Online (Sandbox Code Playgroud)
我希望每天的结果都相同或更高. 但有时我会得到一个较小的价值.第二天它又变得正确了.它在两种不同的环境中重现.
例:
我试图通过C#和Mongo直接手动重现它,但是失败了(值总是正确的).
这是怎么回事?