第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

C# 投影中的 $map 和 $filter - 代碼示例

C# 投影中的 $map 和 $filter - 代碼示例

C#
慕無(wú)忌1623718 2023-08-13 14:07:39
我想使用 C# mongodb 驅(qū)動(dòng)程序本機(jī)函數(shù)的聚合框架的 $map 和 $filter 選項(xiàng)。有什么辦法可以做到這一點(diǎn)嗎?如果是的話(huà),您可以提供一些代碼示例嗎?我搜索了 Mongo DB 的官方文檔,但沒(méi)有找到任何結(jié)果。以下代碼位于 mongo shell 腳本中,我想轉(zhuǎn)換為 C# mongodb 驅(qū)動(dòng)程序。var pipeline = [    {        $match:{            ExId: {$in: [ObjectId('5d112f91cb865c02b0714d56'), ObjectId("5d168d2c305196e45e73f4a7")]}        }    },    {        $project:{            ExId: 1,            ArrayObject: {                $map:{                    'input': '$ArrayObject',                    'as': 'itemA',                    'in':{                        'Name': '$$itemA.Name',                        'FilterHere': {                            $filter: {                                input: '$$itemA.FilterHere',                                as: 'item',                                cond: {                                    $eq: ['$$item.Sent', true]                                }                            }                        }                    }                                        }            }        }    }]db.getCollection('MyColection').aggregate(pipeline)我期望將以下輸出輸出到 C# 對(duì)象中:{    "_id" : ObjectId("5d444527cb865d28e8572d8d"),    "ExId" : ObjectId("5d112f91cb865c02b0714d56"),    "ArrayObject" : [         {            "Name" : 130774,            "FilterHere" : [                 {                    "Code" : 15900181,                    "SentDate" : ISODate("2019-08-02T11:13:11.732Z"),                    "Sent" : true                },                 {                    "Code" : 15900184,                    "SentDate" : ISODate("2019-08-02T11:13:11.735Z"),                    "Sent" : true                }            ]        }    ]}謝謝。
查看完整描述

1 回答

?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

要在 C# 驅(qū)動(dòng)程序中構(gòu)建聚合管道,您有 3 個(gè)選項(xiàng)。

  1. 您可以使用 LINQ 進(jìn)行聚合,但 LINQ 和 Mongo 查詢(xún)語(yǔ)言之間并不總是 1:1 映射。

  2. 您可以使用驅(qū)動(dòng)程序特定的Builder類(lèi)。

  3. 您可以使用BsonDocument構(gòu)建器來(lái)構(gòu)建“原始”聚合。使用此方法的類(lèi)型安全性有限,或者沒(méi)有類(lèi)型安全性。

前兩個(gè)選項(xiàng)要求您創(chuàng)建適當(dāng)?shù)念?lèi),因?yàn)榫幾g器將強(qiáng)制執(zhí)行類(lèi)型安全。

您提供給選項(xiàng) 3 的聚合的“原始”轉(zhuǎn)換相當(dāng)簡(jiǎn)單,盡管有點(diǎn)冗長(zhǎng)。

var foo = new BsonDocument("$project",

new BsonDocument("ExId", 1).Add("ArrayObject",

? ? new BsonDocument("$map",

? ? ? ? new BsonDocument("input", "$ArrayObject").Add("as", "itemA").Add("in",

? ? ? ? ? ? new BsonDocument("Name", "$$itemA.Name").Add("$filter",

? ? ? ? ? ? ? ? new BsonDocument("input", "$$itemA.FilterHere").Add("as", "item").Add("cond",

? ? ? ? ? ? ? ? ? ? new BsonDocument("$eq", new BsonArray().Add("$$item.Sent").Add(true))))))));

不幸的是,由于我不知道你的輸入類(lèi)是什么樣的,所以我很難直接將你的管道轉(zhuǎn)換成代碼。然而,查看表達(dá)式文檔,它似乎$map用于.SelectLINQ 并$filter用于.WhereLINQ。這意味著,您的代碼看起來(lái)像


col.Aggregate()

.Match(doc => ids.Contains(doc.ExId))

.Project(doc =>?

? ? new {

? ? ? ? ExId = doc.ExId,

? ? ? ? ArrayObject = doc.ArrayObject.Select(x =>

? ? ? ? ? ? new

? ? ? ? ? ? {

? ? ? ? ? ? ? ? Name = x.Name,

? ? ? ? ? ? ? ? FilterHere = x.FilterHere.Where(y => y.Sent == true)

? ? ? ? ? ? })

? ? ? ? });

因?yàn)槲覜](méi)有你的實(shí)際課程,所以我只能猜測(cè)它們是什么樣子,這StartObject是我最好的猜測(cè)。


查看完整回答
反對(duì) 回復(fù) 2023-08-13
  • 1 回答
  • 0 關(guān)注
  • 133 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)