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响应,但没有行受到影响。

sub-sub-array推不工作

我不确定通用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,
                   });

现在一切似乎都很合乎逻辑,但正如他们所说的"事后诸葛亮"。