1) Вот моя схема:Powershell запрашивая MongoDB
{
"_id" : ObjectId("53f4db1d968166157c2d57ce"),
"init" : "SJ",
"name" : "Steve Jobs",
"companies" : [
{
"_id" : ObjectId("53f4db1d968166157c2d57cf"),
"ticker" : "AAPL",
"compname" : "Apple"
},
{
"_id" : ObjectId("53f4db1d968166157c2d57d0"),
"ticker" : "MSFT",
"compname" : "Microsoft"
},
{
"_id" : ObjectId("53f4db1d968166157c2d57d1"),
"ticker" : "ABC",
"compname" : "iTunes"
},
{
"_id" : ObjectId("53f4db1d968166157c2d57d2"),
"ticker" : "DEF",
"compname" : "iPad Mini"
}
]
}
Я пытаюсь получить список compnames, используя Powershell & MongoDB. Вот что у меня есть до сих пор:
$databaseName = "CompanyInfo"
$collectionName = "comps"
$client = New-Object -TypeName MongoDB.Driver.MongoClient -ArgumentList "mongodb://localhost:27017"
$server = $client.GetServer()
$database = $server.GetDatabase($databaseName)
$collection = $database.GetCollection($collectionName)
$query['init'] = "SJ"
$results = $collection.FindOne($query)
foreach ($result in $results) {
write-host $result["companies.ticker"] /// Doesn't show me any records
}
Это не показывает мне никаких записей. Как я могу отображать информацию о компании.ticker, где init = «SJ»?
2) Кстати, я получаю следующее сообщение об ошибке после
$query['init'] = "SJ"
ошибки
Cannot index into a null array.
At line:9 char:1
+ $query['init'] = "SJ"
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
Любые идеи, почему? У меня только стандартный индекс MongoDB, который находится на «_id», больше ничего. Мой сценарий powershell все еще работает, но мне любопытно, почему я получаю эту ошибку.
[UPDATE Часть 2] Благодаря @ arco444, я больше не получаю ошибку в части 2. Вот мой пересмотренный код:
$query = @{'init' = "SJ"}
$collection.FindOne([MongoDB.Driver.QueryDocument]$query)
Но я на самом деле нужна помощь с частью 1 - что для отображения только тикеры компании для конкретного init. Есть идеи по этому поводу?
[ANSWER Part 1] Еще раз спасибо @ arco444 за то, что направили меня на правильный путь. После некоторого возиться, я понял, что я пропустил. Вот мой обновленный код:
$databaseName = "CompanyInfo"
$collectionName = "comps"
$client = New-Object -TypeName MongoDB.Driver.MongoClient -ArgumentList "mongodb://localhost:27017"
$server = $client.GetServer()
$database = $server.GetDatabase($databaseName)
$collection = $database.GetCollection($collectionName)
$query = new-object MongoDB.Driver.QueryDocument("init","SJ") /// Updated
$results = $collection.FindOne($query)
foreach ($result in $results["companies"]) { /// Updated
write-host $result["ticker"] /// Updated
}
спасибо. Это устранило эту ошибку. Но не могли бы вы пролить свет на то, как отображать тикеры компании, используя powershell? –
@inquisitive_one Обновили ответ, попробуйте еще раз. – arco444