MongoDBのドキュメントの子配列の子要素を変更するにはどうすればよいですか?私はMongoDB(C#ドライババージョン:2.5、サーババージョン:3.2.0)の最新のC#ドライバを使用していますが、私はSO(重複した質問もあります)ソース。ほとんどのソリューションは時代遅れであることが判明しました。以下はC#ドライバを使用してMongoDB Arrayの子ドキュメントを更新する方法
私のサンプル文書です:
[{
"_id" : "69c4f77d-05ef-431d-ae17-c076c6173e04",
"title" : "Root Page",
"createdAt" : ISODate("2017-12-21T12:28:00.680+0000"),
"modifiedAt" : ISODate("2017-12-26T07:18:11.165+0000"),
"pages" : [
{
"_id" : "f449dc0b-3d1b-4a59-b622-6a42ce10b147",
"title" : "Test page 1",
"slug" : "test-page-1",
"createdAt" : ISODate("2017-12-21T12:28:00.680+0000"),
"modifiedAt" : ISODate("2017-12-21T12:28:00.680+0000")
},
{
"_id" : "3d1497d7-f74c-4d88-b15c-bf2f9c736374",
"title" : "Test page 2",
"slug" : "test-page-2",
"createdAt" : ISODate("2017-12-25T11:27:55.006+0000"),
"modifiedAt" : ISODate("2017-12-25T11:27:55.006+0000")
},
{
"_id" : "6e827e2a-5a25-4343-b646-885816bb8cc4",
"title" : "Test page 3",
"slug" : "test-page-3",
"createdAt" : ISODate("2017-12-25T11:31:16.516+0000"),
"modifiedAt" : ISODate("2017-12-25T11:31:16.516+0000")
}]
},
...,
...
]
文書構造: ルートドキュメントは、それがメタデータやページ(配列)のリストのしているサブ文書の配列を含み、
サブインサイドドキュメント - 私はページ配列内の子ページオブジェクトのタイトルとスラグを更新しようとしたが、持っています最新のドライバーでこれまでのところ運がない。
私は次のフィルタと更新クエリを使用しています:
今 var filter = Builders<SubDocument>.Filter.And(Builders<SubDocument>.Filter.Eq("_id", "xxx"), Builders<SubDocument>.Filter.ElemMatch(x => x.Pages, p => p.Id == "xxx"));
var update = Builders<SubDocument>.Update
.Set("pages.$.title", "changed title")
.Set("pages.$.slug", "changed-title")
.Set("pages.$.modifiedAt", DateTime.UtcNow);
_mongoDb.Documents.UpdateOne(filter, update);
- このクエリは私にエラーを返します:
Invalid BSON field name pages.$.title
私は最後の数時間のために一緒に来た参照がに言っています"$"演算子を使用しますが、最新のドライバでエラーが発生します。
[編集1]は、ここに私のモデルです:
public class SubDocument
{
public SubDocument()
{
Id = Guid.NewGuid().ToString();
CreatedAt = DateTime.UtcNow;
ModifiedAt = DateTime.UtcNow;
Pages = new List<Page>();
}
[BsonId]
public string Id { get; set; }
[BsonElement("title")]
public string Title { get; set; }
[BsonElement("createdAt")]
public DateTime CreatedAt { get; set; }
[BsonElement("modifiedAt")]
public DateTime ModifiedAt { get; set; }
[BsonElement("pages")]
public List<Page> Pages { get; set; }
}
public class Page
{
[BsonId]
public string Id { get; set; }
[BsonElement("title")]
public string Title { get; set; }
[BsonElement("slug")]
public string Slug { get; set; }
[BsonElement("createdAt")]
public DateTime CreatedAt { get; set; }
[BsonElement("modifiedAt")]
public DateTime ModifiedAt { get; set; }
}
誰ですか?前もって感謝します!
どの要素を更新する必要がありますか?またはすべてのページ?フィルターはありますか? – Evk
こんにちは@Evk、私は、PS、感謝の質問を更新しました! –
SubDocumentのモデルも含めることができますか?ちょうどその人がそれを貼り付けることができるように – Evk