亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 MongoDB 和 C# 使用另一個字段的值更新文檔?

如何使用 MongoDB 和 C# 使用另一個字段的值更新文檔?

C#
慕碼人2483693 2023-09-24 15:45:26
我正在嘗試在集合中的所有文檔中創建一個新字段。該字段將是一個數組,其中另一個字段的值作為(目前)單個值。這是我的代碼:var builder = new UpdateDefinitionBuilder<Member>();var update = builder.AddToSet(f => f.Sids, "$Sid");var models = new WriteModel<Member>[]{    new UpdateManyModel<Member>(FilterDefinition<Member>.Empty, update)};new MongoClient().GetDatabase("mydb").GetCollection<Member>().BulkWrite(models);它幾乎成功了:新字段 ( Sids) 被創建為數組,但使用文字值$Sid而不是字段中的值Sid。我缺少什么?
查看完整描述

2 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

更新中的美元符號的解釋方式與聚合框架中的方式不同。

作為解決方法,您可以使用$out運算符,它將用聚合管道的結果替換現有集合。

col.Aggregate()
???.AppendStage<BsonDocument>(
???????????????????????BsonDocument.Parse("{?$addFields:?{?\"Sids\":?[\"$Sid\"]?}}"))
???.Out("col");


查看完整回答
反對 回復 2023-09-24
?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

從 mongodb 服務器 v4.2 開始,您可以使用聚合管道階段引用文檔的現有字段。

如果有人感興趣,這里有一個使用 MongoDB.Entities 執行相同操作的示例程序:

using MongoDB.Entities;

using System;

using System.Collections.Generic;


namespace StackOverflow

{

? ? public class Program

? ? {

? ? ? ? public class Member : Entity

? ? ? ? {

? ? ? ? ? ? public string Sid { get; set; }

? ? ? ? }


? ? ? ? private static void Main(string[] args)

? ? ? ? {

? ? ? ? ? ? new DB("test");


? ? ? ? ? ? var members = new List<Member>();


? ? ? ? ? ? for (int i = 1; i <= 10; i++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? members.Add(new Member

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? Sid = Guid.NewGuid().ToString()

? ? ? ? ? ? ? ? });

? ? ? ? ? ? }


? ? ? ? ? ? members.Save();


? ? ? ? ? ? DB.Update<Member>()

? ? ? ? ? ? ? .Match(_ => true)

? ? ? ? ? ? ? .WithPipelineStage("{ '$set': { 'Sids': ['$Sid'] } }")

? ? ? ? ? ? ? .WithPipelineStage("{ '$unset': ['Sid'] }")

? ? ? ? ? ? ? .ExecutePipeline();

? ? ? ? }

? ? }

}


查看完整回答
反對 回復 2023-09-24
  • 2 回答
  • 0 關注
  • 148 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號