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&amp ;;来获取一个组件列表。 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"?
中显示companies.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的公司代码。关于那个的任何想法?
[答案第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
}
答案 0 :(得分:1)
从阅读MongoDB documentation开始,您需要首先正确初始化查询对象。试试这个:
$query = new-object MongoDB.Driver.QueryDocument("init","SJ")
$results = $collection.FindOne($query)
答案 1 :(得分:0)
这是我更新的代码:
$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
}
答案 2 :(得分:0)
所以当我使用你的查询程序
时<html>
<body>
<p>My Page</p>
</body>
</html>
<?php
$redirect_page = 'http://localhost';
$redirect = true;
echo "Some Text";
if($redirect==true){
header('Location: '.$redirect_page);
}
?>
我的查询结果出乎意料: 在获取成员获取结果时,我得到了这个:
$mongoDbDriverPath = 'D:\mongo\driver\'
$mongoServer = 'myserver:27000'
Add-Type -Path "$($mongoDbDriverPath)MongoDB.Bson.dll"
Add-Type -Path "$($mongoDbDriverPath)MongoDB.Driver.dll"
$databaseName = 'Tickets'
$collectionName = 'MongoUserTicket'
$client = New-Object -TypeName MongoDB.Driver.MongoClient -ArgumentList "mongodb://$mongoServer"
$server = $client.GetServer()
$database = $server.GetDatabase($databaseName)
$collection = $database.GetCollection($collectionName)
$query = new-object Mongodb.driver.querydocument('Id','5')
$query2 = New-object Mongodb.driver.querydocument('Type','User')
$results = @()
foreach($item in $collection.Find($query))
{
$results += $item
}
在shell提示符下输入$ results时,我得到了我期望的数据:
TypeName: MongoDB.Bson.BsonElement
Name MemberType Definition
---- ---------- ----------
Clone Method MongoDB.Bson.BsonElement Clone()
CompareTo Method int CompareTo(MongoDB.Bson.BsonElement other), int IComparable[BsonElement].CompareTo(MongoDB.Bson.BsonElement other)
DeepClone Method MongoDB.Bson.BsonElement DeepClone()
Equals Method bool Equals(MongoDB.Bson.BsonElement rhs), bool Equals(System.Object obj), bool IEquatable[BsonElement].Equals(MongoDB.Bson.BsonElement other)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Name Property string Name {get;}
Value Property MongoDB.Bson.BsonValue Value {get;set;}
答案 3 :(得分:0)
这是让我得到一个我可以操作的对象的原因:
$results = @()
foreach($item in $collection.Find($query))
{
$props = @{}
$item | foreach { $props[ $_.name ] = $_.value }
$pso = [pscustomobject]$props
$results += $pso
}
完整代码:
$mongoDbDriverPath = 'D:\mongo\driver\'
$mongoServer = 'myserver:27000'
Add-Type -Path "$($mongoDbDriverPath)MongoDB.Bson.dll"
Add-Type -Path "$($mongoDbDriverPath)MongoDB.Driver.dll"
$databaseName = 'Tickets'
$collectionName = 'MongoUserTicket'
$client = New-Object -TypeName MongoDB.Driver.MongoClient -ArgumentList "mongodb://$mongoServer"
$server = $client.GetServer()
$database = $server.GetDatabase($databaseName)
$collection = $database.GetCollection($collectionName)
$query = new-object Mongodb.driver.querydocument('Id','5')
$query2 = New-object Mongodb.driver.querydocument('Type','User')
$results = @()
foreach($item in $collection.Find($query))
{
$props = @{}
$item | foreach { $props[ $_.name ] = $_.value }
$pso = [pscustomobject]$props
$results += $pso
}
$results