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

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

MongoDB - 重建文檔,保留數(shù)組的最后一個元素

MongoDB - 重建文檔,保留數(shù)組的最后一個元素

PHP
ITMISS 2023-04-21 14:04:27
示例文檔https://pastebin.com/x2kVUnP3理解數(shù)據(jù)每個字段數(shù)組計數(shù)與 fetch_dates 相同,因此如果我們想獲取2019-06-07 05:34:29的數(shù)據(jù)集,它將返回所有內部字段$arrayElemAt = 1以獲得最新結果,對于對應的字段。期望的結果主要思想是重建所有文檔并僅保留每個字段的最新 fetch_date 和最后一個值。在這種情況下,只需保留圖像的橙色線即可。問題基本上我不知道從哪里開始或如何開始,如果可以的話。每個文檔可以有不同的數(shù)組大小 (fetch_dates) 但結構是相同的。有 225k 個文檔要處理,平均大小為 2.5kb。任何提示將不勝感激。我的初步想法我想通過 PHP 腳本獲取所有字段及其最后一個元素,例如首先遍歷所有文檔,然后遍歷所有字段和 $project 值,我認為這是一個$arrayElemAt => [ $field3.field3_1, -1 ]壞主意。我正在使用 PHP - Laravel,但我能夠轉換查詢以使其在那里工作。
查看完整描述

1 回答

?
小怪獸愛吃肉

TA貢獻1852條經(jīng)驗 獲得超1個贊

這是一個純粹來自 MongoDB shell 的解決方案。

我的解決方案依賴于聚合管道和使用項目操作。在你的問題中你說,

每個文檔可以有不同的數(shù)組大小 (fetch_dates) 但結構是相同的。

基于此,我認為沒有理由必須遍歷數(shù)據(jù)庫中的所有文檔。相反,您可以只從數(shù)據(jù)庫中提取一個文檔并使用它來提出一個應該適用于數(shù)據(jù)庫中所有文檔的投影。這是我想出的代碼。

function buildProjection(doc, prepend) {

? var projection = {};


? Object.keys(doc)

? ? .forEach(key => {

? ? ? var val = doc[key];

? ? ? var path = prepend==null? key : prepend + '.' + key;


? ? ? if (key == '_id') {

? ? ? ? projection[key] = 1;


? ? ? } else if ( Array.isArray(val) ) {

? ? ? ? projection[key] = { '$slice' : [ '$'+path, -1 ] };


? ? ? } else if ( typeof val === 'object' && val !== null ) {

? ? ? ? projection[key] = buildProjection(val, path);


? ? ? } else {

? ? ? ? projection[key] = 1;

? ? ? }

? ? });


? ? return projection;

}


/*

?* Pull a document out of the database and build the projection based off of it.

?* You may want to specify a particular document in the findone

?* that you know to be structured correctly

*/

var sample = db.myCollection.findOne({});

var projection = buildProjection(sample, null);


db.myCollection.aggregate([

? // apply the build projection

? { $project: projection },

? // insert results into another collection

? { $out: 'rebuiltWithLatest' }

]);

我不確定您是否想將結果保存在另一個集合中。我用這個解決方案這樣做了。花了幾秒鐘,但我用 300k 文檔運行這個沒有問題,這很像你的鏈接示例。


如果您只想查看文檔,請從聚合管道中刪除 $output 操作。然后它將返回一個游標對象,您可以迭代該對象以查看其他結果。


查看完整回答
反對 回復 2023-04-21
  • 1 回答
  • 0 關注
  • 144 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號