【发布时间】:2014-08-27 14:42:13
【问题描述】:
1) 这是我的架构:
{
"_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"
}
]
}
我正在尝试使用 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
}
这没有显示任何记录。如何在 init = "SJ" 的地方显示 company.ticker 信息?
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 的公司代码。有什么想法吗?
[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
}
【问题讨论】:
标签: mongodb powershell mongodb-.net-driver mongodb-query