有没有办法记录MongoDB C#驱动程序生成的实际查询并发送到mongodb?与SQL Server一样,您可以使用SQL Profiler向您显示所有传入的查询.
我无法找出插入子数组...
我想将项目插入MyArray ...
我的更新文件应该如何?
MyCollection.Update(
new QueryDocument { { "_id", MyObject.Id } },
new UpdateDocument { { "$set", new BsonDocument { { "MyArray",
new BsonArray { new BsonDocument {{ "ArrayItemId", myArrayField.Id }},
new BsonDocument {{ "Name", myArrayField.Name }} }}}}},
UpdateFlags.None);
Run Code Online (Sandbox Code Playgroud) 我想在MongoDb中进行有效查询,以查找在用户组中列出其用户ID的所有用户.理想情况下,我想将此作为对Mongodb的单个请求.我想要的对应于SQL中的嵌套选择.我在mongo shell中试过这个:
db.user.save({_id:"u1", Name:"u1 name"});
db.user.save({_id:"u2", Name:"u1 name"});
db.user.save({_id:"u3", Name:"u3 name"});
db.usergroup.save({_id:"g1", Users: ["u2","u3"]});
Run Code Online (Sandbox Code Playgroud)
现在这里是我想做的选择,但没有硬编码["u2","u3"]数组:
db.user.find({_id:{$in:["u2","u3"]}}).forEach(printjson);
Run Code Online (Sandbox Code Playgroud)
这很好,并返回u2和u3的用户对象.
现在的问题是如何使用查询提取$ in运算符中的userid数组,以便可以使用单个请求创建整个查询.
像这样的"嵌套查询"不起作用:
db.user.find({_id:{$in:db.usergroup.find({_id:"g1"},{_id:0,Users:1})}}).forEach(printjson);
Run Code Online (Sandbox Code Playgroud)
给出了这个错误:Tue Mar 27 06:17:41未捕获异常:错误:{"$ err":"无效查询","代码":12580}无法加载:mongoNestedSelect.js
1)这可能在mongodb中如何?
2)如何使用官方c#驱动程序执行此操作?
你能用2.0驱动程序帮助我正确运行"拉(删除)".
我有一个这样的集合,我想删除第一个跟随者字段命名为fethiye的追随者.
{
"_id": ObjectId("554e05dfc90d3d4dfcaa2aea"),
"username": "bodrum",
"followerList": [
{
"_id": ObjectId("554e0625a51586362c33c6df"),
"follower": "fethiye",
"avatar": "fethiye.png"
},
{
"_id": ObjectId("554e0625a51586362c33c6df"),
"follower": "izmir",
"avatar": "izmir.png"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我该如何修复此查询?
var filter = new BsonDocument("username", "bodrum");
var update = Builders<Person>.Update.Pull("followerList:follower", "fethiye");
Person pr = collection.FindOneAndUpdateAsync(filter, update).Result;
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在从事一个集成项目。将实体插入 mongodb 时出现错误。
错误消息返回以下字符串:
MongoDB.Bson.BsonSerializationException:“序列化类 Order 的 OrderData 属性时发生错误:类型 MarketplaceOrder 未配置为此 ObjectSerializer 实例的允许类型。'
之前几步,我从任何 api 资源获取数据并将数据转换为我的通用对象,<T>如下行所示。
var data = (JArray)returnDataFromNetwork.Data;
var order = data.ToObject<T>()
Run Code Online (Sandbox Code Playgroud)
将实体插入 mongodb 时出现错误
_orderRepository.InsertAsync(new Order
{
OrderData = order,
});
Run Code Online (Sandbox Code Playgroud)
public class Order
{
public object OrderData { get; set; }
}
public class MarketplaceOrder
{
[JsonProperty("marketplace")]
public string Marketplace { get; set; }
[JsonProperty("account_id")]
public int AccountId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
感谢您的支持,
我试图解释的所有事情都是关于“hangfire”(后台服务)项目的。首先,我在服务器控制台上收到此错误消息。然后我尝试在本地调试以了解问题所在。我无法理解错误消息的详细信息。
我在mongo shell中运行以下代码:
db.unicorns.insert({name: 'Dunx', loves: ['grape', 'watermelon']});
Run Code Online (Sandbox Code Playgroud)
现在我在MongoDB集合中有这样的东西:
{name: 'Dunx', loves: ['grape', 'watermelon']}
Run Code Online (Sandbox Code Playgroud)
你可以看到loves一个数组.
题
如何使用官方C#驱动程序编写C#代码,执行以下操作:
db.unicorns.update({name: 'Aurora'}, {$push: {loves: 'sugar'}})
Run Code Online (Sandbox Code Playgroud)
上面的代码在mongo shell中运行得很好.
我正在尝试使用$pushc#驱动程序在mongodb中的更新查询中使用.
该Update.Push(...)方法需要一个字符串名称(这很好),并且BsonValue需要"推送".这是我遇到问题的地方.我正在尝试将非简单类型推送到字段的数组.
例如: { $push : { "arrayfield" : { "a" : 7, "b" : 12 } } }
这在Mongo控制台中运行良好,但我无法弄清楚如何将我的对象变成BsonValue.我试过BsonValue.Create(myObjectInstance)但是这给了我一个错误,说.NET类型无法映射到BsonValue.
我错过了一些简单的事吗?
我有一个包含一系列文档的产品文档.例如
{
id: 1,
name: "J-E-L-L-O",
store:[{id: 1,
name: "Store X"},
{id: 2,
name: "Store Y"}]
}
Run Code Online (Sandbox Code Playgroud)
我想将"Store Y"的名称更改为"Store Z",例如.当时,我不知道对象的索引.所以,我拉出整个数组,找到要更新的对象,更改名称,然后尝试使用更新的数组设置"store"的值.
productCollection.Update(query, Update.Set("store", storeList.ToBsonDocument()));
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误: "An Array value cannot be written to the root level of a BSON document."
我想我只需要知道如何将自定义对象数组序列化为BsonDocuments数组.
在此先感谢您的帮助.
我正在尝试使用.NET驱动程序将文档插入MongoDB 2.4.4.它似乎不会自动生成_idon upsert,虽然它确实正确生成了_idon plain插入.如何让驱动程序正确生成_id?
这是一个展示问题的小例子.
public class MongoObject
{
[BsonId(IdGenerator = typeof(StringObjectIdGenerator))]
[BsonRepresentation(BsonType.ObjectId)]
public string MongoID { get; set; }
public int Index { get; set; }
}
var obj = new MongoObject()
{
Index = 1
};
//This inserts the document, but with a _id set to Null
_collection.Update(Query.EQ("Index", BsonValue.Create(1)), Update.Replace(obj), UpdateFlags.Upsert, new WriteConcern() { Journal = true });
//This inserts the document with the expected autogenerated _id
//_collection.Insert(obj);
Run Code Online (Sandbox Code Playgroud) 我想查询我的MongoDB集合而没有使用MongoDB .NET Driver 2.0的任何过滤器,但我找不到办法.我有以下解决方法,但看起来很奇怪:D
var filter = Builders<FooBar>.Filter.Exists(x => x.Id);
var fooBars = await _fooBarCollection.Find(filter)
.Skip(0)
.Limit(100)
.ToListAsync();
Run Code Online (Sandbox Code Playgroud)
有没有办法在MongoDB .NET Driver 2.0中没有过滤器的情况下发出查询?