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脚本仍然有效,但我很好奇,为什么我得到这个错误。
[更新第2]感谢@ arco444,我不再收到错误部分2.这是我修改后的代码:
$query = @{'init' = "SJ"}
$collection.FindOne([MongoDB.Driver.QueryDocument]$query)
但我确实需要与第1部分帮助 - 这是显示只有公司代表特定的init。对此有任何想法?
[回答第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显示公司代码? – 2014-08-27 15:58:48
@inquisitive_one更新了答案,再去一次。 – arco444 2014-08-27 16:29:24