【问题标题】:C# mongoDB wont update array in databaseC# mongoDB 不会更新数据库中的数组
【发布时间】:2016-01-18 01:02:23
【问题描述】:

我想更新我的 mongoDB 集合中的数组。发布新文档可以正常工作,但不会更新数组。我的文档结构是:

 var document = new BsonDocument
        {               
            { "post_title",  model.Title  },
            { "post_text",  model.Text  },
            { "post_author",  model.Author  },
            { "post_picture",  model.Picture  },
            { "post_comments",  new BsonArray()  },
        };

而我的更新功能是:

[HttpPost]
    [Route("api/PostInfo/{Comment}")]
    public async Task Post(Comment comment)
    {
        try {
            BsonObjectId oldId = new BsonObjectId(new ObjectId(comment.id.ToString()));

            var mongoDbClient = new MongoClient("mongodb://127.0.0.1:27017");
            var mongoDbServer = mongoDbClient.GetDatabase("nmbp");
            var collection = mongoDbServer.GetCollection<PostInfo>("post");

            var filter = Builders<PostInfo>.Filter.Eq(e => e._id, oldId);
            var update = Builders<PostInfo>.Update.Push("post_comments", comment.comment);
            await collection.FindOneAndUpdateAsync(filter, update);
            var test = oldId.GetType();
        }
        catch
        {
        }
    }

调试时,我可以看到后控制器被触发,并且注释值是正确的,但是当我查看数据库时,“post_cmets”数组的值是空的。在 catch 块中不会引发错误。我做错了吗?

【问题讨论】:

    标签: c# arrays mongodb bson


    【解决方案1】:

    看起来问题出在这一行:

    var filter = Builders<PostInfo>.Filter.Eq(e => e._id, oldId);
    

    正确的应该是这样的:

    var filter = Builders<PostInfo>.Filter.Eq("_id", oldId);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2014-04-27
    • 2021-10-20
    相关资源
    最近更新 更多