【问题标题】:C# Mongodb Driver - How to insert an element into an array at position 0C# Mongodb 驱动程序 - 如何将元素插入到位置 0 的数组中
【发布时间】:2015-09-12 13:40:15
【问题描述】:

我似乎找不到在 Mongodb C# 驱动程序的数组中特定索引处插入元素的方法。 - 例如在位置 0 插入一个元素。

唯一明显的插入数组是使用推送,但它是追加到数组的末尾。

我尝试了以下方法但不起作用。

var filter = Builders<ChatRoom>.Filter.Eq(Keys.MongoId, ObjectId.Parse(chatRoomId));
var update = Builders<ChatRoom>.Update.Set(Keys.Comments + ".$.-1", comment);

var update = Builders<ChatRoom>.Update.Push(Keys.Comments+".-1",comment);

但它不起作用。此外,我似乎在 Mongodb C# 文档中找不到 $position 运算符。 - 希望能有所帮助,如果相关的话。

【问题讨论】:

    标签: c# mongodb mongodb-.net-driver


    【解决方案1】:

    好吧,超级简单,在探索了驱动程序和 Visual Studio 的智能感知的帮助之后,这里是正确的答案:

    var filter = Builders<ChatRoom>.Filter.Eq(Keys.MongoId, ObjectId.Parse(chatRoomId));
    var update = Builders<ChatRoom>.Update.PushEach(Keys.Comments, new List<Comment>() { comment }, position: 0);
    await MongoCollections.GetChatRoomCollection().UpdateOneAsync(filter, update);
    

    【讨论】:

    • 有时,最好先弄清楚 mongodb 是如何支持这一点的,然后再在驱动程序中尝试:docs.mongodb.org/manual/reference/operator/update/push
    • @CraigWilson 感谢您的评论,您一定是创建驱动程序的人,很高兴认识您。是的,我同意,我实际上知道 mongodb 支持它,因为我曾经用 Python 编写过它。我只是不知道它是如何在 C# 中完成的。
    • @CraigWilson 抱歉,这个操作的时间复杂度是多少?我假设 O(n) 但如果你愿意,我想澄清一下
    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2011-03-22
    相关资源
    最近更新 更多