sub-sub-array推不工作
本文关键字:工作 sub-sub-array | 更新日期: 2023-09-27 18:05:10
我有以下模式:
{
"_id" : ObjectId("537ba668a9df7408986afc05"),
"AppName" : "My App",
"AppId" : "123",
"AppGreetingText" : "Thank you!",
"AppGreetingImageUrl" : "http://www.cute-wallpaper.com/backgrounds/rainbow/colorful_rainbow_party.jpg",
"DateCreated" : ISODate("2014-05-20T00:00:00.000Z"),
"AppUsers" : [
{
"uId" : 1
"Token" : "123",
"UserName" : "Donna Amhccijhfidb Sidhuwitz",
"ProfileImageUrl" : "1.png",
"Email" : "bla@bla.net",
"BookIds" : []
}
我想把一个新字符串压入PostIds
。
var query = Query.And(
Query<App>.EQ(a => a.Id, entity.Id),
Query<AppUser>.EQ(u => u.uId, UserId)
);
var updateResult = this.MongoConnectionHandler.MongoCollection.Update(
query,
Update<AppUser>.Push(au => au.BookIds, bookId),
new MongoUpdateOptions()
{
WriteConcern = WriteConcern.Acknowledged,
});
我对子数组做了类似的事情,但这似乎对子数组不起作用,我不知道为什么。bookIds是POCO中的List<string>
,如果这是相关的。
编辑: Henk -你是对的。"这似乎不工作"意味着我期望新的字符串被推入数组,但实际的结果是,它没有被推入数组和数组保持空,就像一个在示例文档。我正在查看结果,我在WriteConcernResult
中找不到任何错误。我得到了"ok" : 1
响应,但没有行受到影响。
我不确定通用API是否以这种方式工作。但是对于MongoDB c# Driver 1.8,我希望以下代码可以工作:
var query = Query.And(
Query.EQ("_id", entity.Id),
Query.EQ("AppUsers.uId", UserId)
);
var update = Update.Push("AppUsers.$.BookIds", bookId);
var updateResult = this.MongoConnectionHandler.MongoCollection.Update(
query, update);
我忽略了WriteConcern
部分,因为我认为Acknowledged
是默认设置。
我一直都做错了。我不知道我当时在想什么,但是我编写查询的方式并没有让我访问到我需要的对象。我想要访问一个子文档,而我所能直接从集合对象中访问的是一个类型为App
的实体,无论我编写什么样的查询。对这个集合的任何查询都只能返回一个完整的App
类型文档。
我需要做的是在我找到的单个App
文档中找到特定的子文档。我最终使用的代码是:
var query = Query<App>.EQ(a => a.Id, entity.Id);
var itemIndex = entity.AppUsers.FindIndex(u => u.Id == userId);
var updateResult = this.MongoConnectionHandler.MongoCollection.Update(
query,
Update<App>.Push(a => a.AppUsers[itemIndex].BookIds, bookId),
new MongoUpdateOptions()
{
WriteConcern = WriteConcern.Acknowledged,
});
现在一切似乎都很合乎逻辑,但正如他们所说的"事后诸葛亮"。