Импорт дат в Mongodb с использованием MDBC и Powershell - PullRequest
0 голосов
/ 04 октября 2018

Я использовал модуль командлетов mongodb на github, который позволяет легко импортировать в mongodb из powershell:

https://github.com/nightroman/Mdbc/blob/master/README.md

Импорт данных работает как яможно ожидать, за исключением даты и времени, которые я импортирую.Они заканчиваются как строка после завершения импорта.

Ниже приведен мой код, как вы увидите, я использую командлет powershell get-date для преобразования даты в 24-часовой формат dateTime, который исключается при ручном изменении типа данных в mongodb compass.

$creation_time         =  gci -recurse -File | get-itemproperty | select -ExpandProperty CreationTime   | get-date -Format 'yyyy-MM-dd HH:mm:ss.fff'
$last_access_time      =  gci -recurse -File | get-itemproperty | select -ExpandProperty LastAccessTime | get-date -Format 'yyyy-MM-dd HH:mm:ss.fff'
$last_write_time       =  gci -recurse -File | get-itemproperty | select -ExpandProperty LastWriteTime  | get-date -Format 'yyyy-MM-dd HH:mm:ss.fff'
$file_extension        =  gci -recurse -File | get-itemproperty | select -ExpandProperty Extension
$file_base_name        =  gci -recurse -File | get-itemproperty | select -ExpandProperty BaseName
$file_path             =  gci -recurse -File | get-itemproperty | select -ExpandProperty DirectoryName 


$adsObjects       = New-Object System.Collections.ArrayList
for($i=0; $i -lt $creation_time.Length; $i++){
    $object = New-Object System.Object
    $object | Add-Member -type NoteProperty –Name _id        –Value    $file_base_name[$i]
    $object | Add-Member -type NoteProperty –Name Extension  –Value    $file_extension[$i]
    $object | Add-Member -type NoteProperty –Name Directory  –Value    $file_path[$i]
    $object | Add-Member -type NoteProperty –Name CreateDate –Value    $creation_time[$i]
    $object | Add-Member -type NoteProperty –Name Accesstime –Value    $last_write_time[$i]
    $object | Add-Member -type NoteProperty –Name Writetime  –Value    $last_access_time[$i]
    $adsObjects.Add($object)
}

# Load the module
Import-Module Mdbc

# Connect the new collection test.test
Connect-Mdbc . test test -NewCollection

# add the objects to the collection
$adsObjects | Add-MdbcData

# Get all data as custom objects and show them in a table
Get-MdbcData -As PS | Format-Table -AutoSize | Out-String

Кто-нибудь знает, как я могу гарантировать, что значения дат, которые я отправляю, могут быть установлены в формат даты?Это важная вещь для приложения, над которым я работаю, поскольку есть запросы диапазона дат, которые мне нужно включить.

1 Ответ

0 голосов
/ 04 октября 2018

Самый простой способ убедиться, что элемент равен DateTime, это привести его в ваш For цикл

Пример:

$creation_time = ("01/01/2018","02/02/2018") #For testing
$adsObjects       = New-Object System.Collections.ArrayList
for($i=0; $i -lt $creation_time.Length; $i++){
        $dateTime = Get-Date($creation_time[$i]) #Casting to DateTime
        $object = New-Object System.Object
        $object | Add-Member -type NoteProperty –Name _id        –Value    $file_base_name[$i]
        $object | Add-Member -type NoteProperty –Name Extension  –Value    $file_extension[$i]
        $object | Add-Member -type NoteProperty –Name Directory  –Value    $file_path[$i]
        $object | Add-Member -type NoteProperty –Name CreateDate –Value    $dateTime
        $object | Add-Member -type NoteProperty –Name Accesstime –Value    $last_write_time[$i]
        $object | Add-Member -type NoteProperty –Name Writetime  –Value    $last_access_time[$i]
        $adsObjects.Add($object)
    }

Мы можем подтвердить это простым Foreach цикл:

foreach($member in $adsObjects)
{
    Write-Host $member.CreateDate
    Write-Host ($member.CreateDate).GetType()
}

Выход:

1/1/2018 12:00:00 AM 
System.DateTime 
2/2/2018 12:00:00 AM 
System.DateTime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...