Powershell和Mongo API

Powershell和Mongo API,powershell,Powershell,在过去的几天里,我编写了一个脚本,通过powershell使用mongo atlas api创建集合(使用此cmdlet)和数据库用户及角色。脚本工作正常,但我无法创建控件来检查集合是否已经存在(我可以在csv上检查环境以在正确的环境中创建对象)。因此,例如,如果我在同一环境中运行脚本在同一集合上创建两个角色,我会得到一个错误,即集合存在: 如何在所有环境中执行控件检查并跳过集合创建(如果存在)?这里涉及的代码是: $filepath = "namecsv.csv" $listas

在过去的几天里,我编写了一个脚本,通过powershell使用mongo atlas api创建集合(使用此cmdlet)和数据库用户及角色。脚本工作正常,但我无法创建控件来检查集合是否已经存在(我可以在csv上检查环境以在正确的环境中创建对象)。因此,例如,如果我在同一环境中运行脚本在同一集合上创建两个角色,我会得到一个错误,即集合存在:

如何在所有环境中执行控件检查并跳过集合创建(如果存在)?这里涉及的代码是:

    $filepath = "namecsv.csv" 
$listas = Import-CSV $filepath -delimiter ";" 
foreach ($lista in $listas) {                      
  $db = $lista.db
  $collection = $lista.collection
  $rolename = $lista.roleName
#dev
if ($rolename -imatch '_DV_' ) {
     Connect-Mdbc -ConnectionString "mongodb+srv://username:password@onnectionstring"
                $dbc = Get-MdbcDatabase -Name $db
                Add-MdbcCollection -Name $collection -Database $dbc
                Write-Host "Collection $collection creata sul db $db di dev" -ForegroundColor Green               
}
#test
if ($rolename -imatch '_TS_') {
     Connect-Mdbc -ConnectionString "mongodb+srv://username:password@onnectionstring"
                $dbc = Get-MdbcDatabase -Name $db
                Add-MdbcCollection -Name $collection -Database $dbc    
                Write-Host "Collection $collection creata sul db $db di test" -ForegroundColor Green

}
#uat
if ($rolename -imatch '_UT_') {
     Connect-Mdbc -ConnectionString "mongodb+srv://username:password@onnectionstring"
                $dbc = Get-MdbcDatabase -Name $db
                Add-MdbcCollection -Name $collection -Database $dbc   
                Write-Host "Collection $collection creata sul db $db di uat" -ForegroundColor Green

}  
#prod
if ($rolename -imatch '_PR_') {
     Connect-Mdbc -ConnectionString "mongodb+srv://username:password@onnectionstring"
                $dbc = Get-MdbcDatabase -Name $db
                Add-MdbcCollection -Name $collection -Database $dbc
                Write-Host "Collection $collection creata sul db $db di prod" -ForegroundColor Green

}
}
以下是csv的结构:

  db     collection  roleName
  dbname collection1 GROUPNAME_DV_RW
  dbname collection1 GROUPNAME_DV_RO
如果您能提供帮助,以下是我使用cmdlet get-mdbc collection获得的信息:


谢谢你的帮助。

你差点就明白了。使用以下代码:

#获取所有集合
$dbcol=Get MdbcCollection-Database dbs
#获取/检查集合“test”(如果不存在则为$null)
$colTest=$dbcol |其中对象{$\.CollectionNamespace.CollectionName-ceq“test”}

请注意,
Get-MdbcCollection test
始终返回一个非空的集合对象,无论是否存在(但无论是否准备好操作)。

您几乎已经明白了这一点。使用以下代码:

#获取所有集合
$dbcol=Get MdbcCollection-Database dbs
#获取/检查集合“test”(如果不存在则为$null)
$colTest=$dbcol |其中对象{$\.CollectionNamespace.CollectionName-ceq“test”}

请注意,
Get-MdbcCollection test
始终返回一个非空的集合对象,无论是否存在(但无论是否准备好操作)。

感谢roman的帮助,但该代码不起作用(可能我不知道放在哪里),因此我修改了“if”,如下所示,现在脚本执行我想要的操作:

if ($rolename -imatch '_TS_') {

 Connect-Mdbc -ConnectionString "mongodb+srv://username:password@connectionstring"
 #### GET COLLECTIONS ###
 $dbtest = Get-MdbcDatabase -name $db
 $colltest = Get-MdbcCollection -Database $dbtest 

    if ($colltest.CollectionNamespace.CollectionName -ceq $collection) {

            Write-Host "Collection $collection esistente su $db di TEST" -ForegroundColor Yellow
}
else {

        Add-MdbcCollection -Name $collection -Database $dbtest 
        Write-Host "Collection $collection creata sul db $db di TEST" -ForegroundColor Green

    }
}

还感谢您的cmdlet:)

感谢roman提供的帮助,但该代码不起作用(可能我不知道该放在哪里),因此我修改了“if”,如下所示,现在脚本执行我想要的操作:

if ($rolename -imatch '_TS_') {

 Connect-Mdbc -ConnectionString "mongodb+srv://username:password@connectionstring"
 #### GET COLLECTIONS ###
 $dbtest = Get-MdbcDatabase -name $db
 $colltest = Get-MdbcCollection -Database $dbtest 

    if ($colltest.CollectionNamespace.CollectionName -ceq $collection) {

            Write-Host "Collection $collection esistente su $db di TEST" -ForegroundColor Yellow
}
else {

        Add-MdbcCollection -Name $collection -Database $dbtest 
        Write-Host "Collection $collection creata sul db $db di TEST" -ForegroundColor Green

    }
}
还感谢您的cmdlet:)