Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 各种查询-MongoDB_Python_Django_Mongodb_Pymongo_Nosql - Fatal编程技术网

Python 各种查询-MongoDB

Python 各种查询-MongoDB,python,django,mongodb,pymongo,nosql,Python,Django,Mongodb,Pymongo,Nosql,这是我的表: unicorns = {'name':'George', 'actions':[{'action':'jump', 'time':123123}, {'action':'run', 'time':345345}, ...]} 如何执行以下查询? 抓住所有独角兽所有动作的时间,其中动作=='jump' 抓取所有独角兽的所有动作,其中时间相等 e、 g.{

这是我的

unicorns =  {'name':'George',
             'actions':[{'action':'jump', 'time':123123}, 
                        {'action':'run', 'time':345345}, 
                        ...]}
如何执行以下查询?

  • 抓住所有独角兽所有动作的时间,其中动作=='jump'

  • 抓取所有独角兽的所有动作,其中时间相等

    e、 g.{'action':'jump','time':123}和{'action':'stomp','time':123}



帮助将是惊人的=)

使用点分隔符号:

db.unicorns.find({'actions.action' : 'jump'})
《纽约时报》也是如此:

db.unicorns.find({'actions.time' : 123})

编辑:如果您想按时间对结果进行分组,您必须使用。

对于第二个查询,您需要使用MapReduce,这可能会产生很大的问题。这将有助于:

map = function() {
    for (var i = 0, j = this.actions.length; i < j; i++) {
        emit(this.actions[i].time, this.actions[i].action);
    }
}
reduce = function(key, value_array) {
    var array = [];
    for (var i = 0, j = value_array.length; i < j; i++) {
        if (value_array[i]['actions']) {
            array = array.concat(value_array[i]['actions']);
        } else {
            array.push(value_array[i]);
        }
    }
    return ({ actions: array });
}

res = db.test.mapReduce(map, reduce)
db[res.result].find()

不幸的是,mongo目前不支持从reduce函数返回数组,因此需要愚蠢的
{actions:[…]}
语法。

第二次查询似乎选择了所有带有
action.time==123的Unicorn。我可能错了,但我明白问题是关于结果的,比如
{12345:[{'action':'jump','time':12345},{'action':'stomp','time':12345}],12390:[{'action':'jump','time':12390},{'action':'run','time':12390}
。。。但也许我错了:)谢谢你的回复!!=)对于第二个问题,我要求按时间对动作进行分组,这样可以更好地表达自己。再次感谢!哇,谢谢你,艾米丽!谢谢你为我指出这个方向,谢谢你的MapReduce功能!!我现在就在上面!!=)
{ "_id" : 123, "value" : { "actions" : [ "jump" ] } }
{ "_id" : 125, "value" : { "actions" : [ "neigh", "canter" ] } }
{ "_id" : 127, "value" : { "actions" : [ "whinny" ] } }