Often one of the things I hear when people recommend you stuff for windows development is to switch to git-bash
as a default terminal. While I do install git
on my machines, I have always wonder why do you need git-bash
as default at all? you have Powershell
after all!
Powershell
comes with a bunch of common bash aliases like ls
, cd
, cat
, etc, you can find most common aliases with Get-Alias
(or get-alias
), I can see right of the bat wget
, tee
and some others. Plus Powershell Core
is Cross Platform!
Sometimes I need to do some manual backups on mongo databases while I know there are thousands of solutions to this already available but one of the ways to learn is to reinvent the wheel for n-th time so I decided to see if there was some way to talk to mongo from powershell and found this project
nightroman / Mdbc
MongoDB Cmdlets for PowerShell
Mdbc
MongoDB Cmdlets for PowerShell Core 7.4
The PowerShell module based on the official MongoDB C# driver
Quick start
Step 1: Get and install Mdbc from the PSGallery:
Install-Module Mdbc
Step 2: Import the module:
Import-Module Mdbc
Step 3: See help and available commands:
help about_Mdbc
help Connect-Mdbc
Get-Command -Module Mdbc
Step 4: Make sure mongod is running and try some commands:
# Load the module
Import-Module Mdbc
# Connect the new collection test.test
Connect-Mdbc . test test -NewCollection
# Add two documents
@{_id = 1; value = 42}, @{_id = 2; value = 3.14} | Add-MdbcData
# Get documents as PS objects
Get-MdbcData -As PS | Format-Table
# Get the document by _id
Get-MdbcData @{_id = 1}
# Update the document, set 'value' to 100
Update-MdbcData @{_id = 1} @{'
…and Decided to give it a go, so I installed the vscode extension for Powershell plus the module in my local modules
Install-Module Mdbc -Scope CurrentUser
after that just created a test.ps1
file
Import-Module Mdbc;
function New-MongoExport {
param (
# Your Server's URL
[string]
$Url = "mongodb://localhost:27017",
# Database to connect to
[string]
$Db = "test",
# Collection Name
[string]
$CollectionName = "users",
# Where do we want to put that information
[string]
$Path = ".\$collectionName.json",
# Default Limit
[int16]
$Limit = 10
)
# Remove the file if it exists
Remove-Item $Path -ErrorAction Continue;
# Connect and count
Connect-Mdbc $Url $Db $CollectionName;
$count = Get-MdbcData -Count;
# Do some fancy output
Write-Host "Exporting $($count) records" -ForegroundColor Yellow -BackgroundColor DarkCyan;
for ($i = 0; $i -lt $count; $i += $Limit) {
# You don't actually need to paginate
# The module uses the mongo driver so it's quite fast
# But anyways it reads like `Skip $i items and take the first $Limit items then, export those`
Get-MdbcData -Skip $i -First $Limit | Export-MdbcData $Path -Append;
}
# We're Done, fancy output
Write-Host "File Written: $Path" -ForegroundColor Black -BackgroundColor Green;
}
New-MongoExport
# Also you can use it like this
# New-MongoExport -Url mongodb://myotherserver:1234 -Db NotTestDB -CollectionName posts
I think the module actually has a way to export collections directly, but like I said above I just wanted to toy out with this.
I don't know, but this appealed to me makes me wonder what I could do with it, besides automation, you know this language is supposed to be used to automate stuff also anyways
Have you done something in Powershell
? share it in the comments!
Also if you don't like Powershell
could you share why?
I mean I guess there's a reason why WSL is a thing nowdays.
Top comments (2)
Hi Angel, I am glad you found Mdbc useful. You might be interested in my recent similar project for LiteDB, Ldbc -- github.com/nightroman/Ldbc
By the way, I got familiar with LiteDB from your AvaFunc project!
Ahh the small world we live in!
I need to update or clean up that project it's just a quick and dirty thing
this could be really neat for offline scripts!
I will take a look indeed 😋