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
Mdbc is the PowerShell module based on the official MongoDB C# driver Mdbc makes MongoDB data and operations PowerShell friendly.
- The PSGallery package is built for PowerShell Core and v5.1 .NET 4.7.1.
- The NuGet package is built for PowerShell v3-v5.1, .NET 4.5.2.
Quick start
Step 1: Get and install
Package from PSGallery
Mdbc for PowerShell Core and v5.1 is published as the PSGallery module Mdbc.
It requires .NET 4.7.1, this command should return true:
(Get-ItemProperty "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release -ge 461308
You can install the module by this command:
Install-Module Mdbc
Package from NuGet
Mdbc for PowerShell v3-v5.1 .NET 4.5.2 is published as the NuGet package Mdbc Download it by NuGet tools or directly In the latter case save it as ".zip" and unzip. Use the package subdirectory "tools/Mdbc".
Copy the directory Mdbc to one of theβ¦
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 π