在 C# 中插入嵌套数组 MongoDB

Insert into nested array in C# MongoDB

我在 MongoDB 中名为 Users 的集合中有以下 document。我正在尝试将 <SpecificBeer> 插入到 mycellar cellarbeersInCellar[] 中。我已经在 filterupdate 对象中尝试了各种组合,但就是无法将我的头围绕在嵌套数组中插入。我知道如何 find a document 并将内容插入其中,只是不插入该文档中的数组。

{
    "_id" : ObjectId("5920751b6d4f6a27cf7985a8"),
    "name" : "FullName",
    "emailAddress" : "emailaddress@example.com",
    "cellars" : [
        {
            "cellarId" : "mycellar",
            "cellarName" : "My Cellar",
            "beersInCellar" : [ ]
        }
    ]
}

特定啤酒型号:

public class SpecificBeer
        {
            public string ourid 
            { 
                get
                {
                    return ID.ToString();
                } 
                set
                { 
                    ID = ObjectId.Parse(value); 
                }
            }
            [BsonId]
            private ObjectId ID {get; set;}
            public string year { get; set; }
            public string variant { get; set; }
            public string quantity { get; set; }
            public string numberForTrade { get; set; }
        }

插入方法

public async Task<SpecificBeer> AddBeerToList(string id, SpecificBeer specificBeer, string cellarId)
{
        var filter = Builders<User>.Filter.Eq(e => e.userId, id) & Builders<User>.Filter.Eq(e => e.cellars, cellarId);

        var update = Builders<Cellar>.Update.Push<SpecificBeer>(e => e.beersInCellar, specificBeer);

        await _collection.FindOneAndUpdateAsync(filter, update);
        return specificBeer;
}

您必须使用 $positional 运算符。

您必须为 mongoDB 包含 cellars 中的字段 (cellarId) 以找到元素的索引并将占位符 ($) 替换为从更新部分的查询部分找到的索引将元素推送到 beersInCellar.

类似

 var filter = Builders<User>.Filter.Eq(e => e.name, "FullName") & Builders<User>.Filter.ElemMatch(e => e.cellars, Builders<Cellar>.Filter.Eq(e => e.cellarId, "mycellar"));
 var update = Builders<User>.Update.Push(e => e.cellars[-1].beersInCellar, specificBeer);

Shell查询参考:

db.collection.update({"name" : "FullName", "cellars":{$elemMatch:{"cellarId":"mycellar"}}},{$push:{"cellars.$.beersInCellar":{"quantity":1, "year":1986}}})

MongoDB 首先 class 不支持更新数组内嵌套数组中的字段(例如 quantity )。

您可以跟踪将允许多级更新的 jira。

https://jira.mongodb.org/browse/SERVER-27089

您现在可能想重新审视您的结构。尝试将 beersInCellar 数组提升到顶层。