【发布时间】:2016-06-03 15:50:24
【问题描述】:
尝试在 PHP 中聚合集合时出现错误。集合“lbls2”包含如下所示的文档:
{
"_id" : ObjectID(1234),
"values" : ["String 1", "String 2", "String 3"]
}
{
"_id" : ObjectID(5678),
"values" : ["String 1", "String 4", "String 7"]
}
{
"_id" : ObjectID(9101),
"values" : ["String 3", "String 5", "String 10"]
}
当我在 Mongo shell 中运行 db.lbls2.aggregate({'$project' : {'values' : 1, '_id' : 0}}) 时,它会返回:
{
"values" : [
"String 1",
"String 2",
"String 3"
]
}
{
"values" : [
"String 1",
"String 4",
"String 7"
]
}
{
"values" : [
"String 3",
"String 5",
"String 10"
]
}
当我在 PHP 中运行 $r = $c_l->aggregate(['$project' => ['values' => 1, '_id' => 0]]); 时,它返回:
致命错误:在 C:\xampp\htdocs\gc4\vendor\mongodb 中出现未捕获的异常 'MongoDB\Exception\InvalidArgumentException' 和消息 '$pipeline is not a list (unexpected index: "$project")' \mongodb\src\Operation\Aggregate.php:93 堆栈跟踪:#0 C:\xampp\htdocs\gc4\vendor\mongodb\mongodb\src\Collection.php(186):MongoDB\Operation\Aggregate->__construct( 'gc_dev', 'lbls2', Array, Array) #1 C:\xampp\htdocs\gc4\admin_dashboard.php(9): MongoDB\Collection->aggregate(Array) #2 {main} 在 C:\xampp 中抛出\htdocs\gc4\vendor\mongodb\mongodb\src\Operation\Aggregate.php 在第 93 行
有趣的是,db.lbls2.aggregate({'$project' : {'values' : '$values.0', '_id' : 0}})(投影值索引 0)返回 '{ "labels" : [ ] }',所以我可能搞砸了插入或做了一些奇怪的事情。我做错了什么?
这是我的 PHP 脚本: 要求('./vendor/autoload.php');
$client = new MongoDB\Client("mongodb://localhost:27017");
$db = $client->gc_dev;
$c_l = $db->lbls2;
$r = $c_l->aggregate(['$project' => ['values' => 1, '_id' => 0]]);
这是我用来插入值的 python 脚本的一部分:
a = urllib2.urlopen('http://urlredacted.com')
a = bs(a)
length = len(a.findAll('a',id=re.compile('rptResults_*')))
for row in a.findAll('a',id=re.compile('rptResults_*')):
cells = row.get_text()
labels.append(cells)
lastIndex =len(labels)
for i in range (0,lastIndex):
labels[i] = unicodedata.normalize('NFKD',labels[i]).encode('ascii','ignore')
#connect to db and insert data
client = MongoClient("mongodb://localhost:27017")
db = client.gc_dev
c_lbls = db.lbls2
lbls_insert = {
"values" : labels
}
c_lbls.insert_one(lbls_insert)
【问题讨论】: