小编sty*_*ane的帖子

查询数组大小大于1的文档

我有一个MongoDB集合,其中包含以下格式的文档:

{
  "_id" : ObjectId("4e8ae86d08101908e1000001"),
  "name" : ["Name"],
  "zipcode" : ["2223"]
}
{
  "_id" : ObjectId("4e8ae86d08101908e1000002"),
  "name" : ["Another ", "Name"],
  "zipcode" : ["2224"]
}
Run Code Online (Sandbox Code Playgroud)

我目前可以获得与特定数组大小匹配的文档:

db.accommodations.find({ name : { $size : 2 }})
Run Code Online (Sandbox Code Playgroud)

这正确地返回name数组中包含2个元素的文档.但是,我无法执行$gt命令返回name字段数组大小超过2的所有文档:

db.accommodations.find({ name : { $size: { $gt : 1 } }})
Run Code Online (Sandbox Code Playgroud)

如何选择name大小大于1 的数组的所有文档(最好不必修改当前数据结构)?

mongodb mongodb-query

611
推荐指数
14
解决办法
33万
查看次数

使用另一个字段的值更新MongoDB字段

在MongoDB中,是否可以使用另一个字段中的值更新字段的值?等效的SQL将是这样的:

UPDATE Person SET Name = FirstName + ' ' + LastName
Run Code Online (Sandbox Code Playgroud)

MongoDB伪代码将是:

db.person.update( {}, { $set : { name : firstName + ' ' + lastName } );
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

331
推荐指数
8
解决办法
17万
查看次数

获取集合中所有键的名称

我想获取MongoDB集合中所有键的名称.

例如,从这个:

db.things.insert( { type : ['dog', 'cat'] } );
db.things.insert( { egg : ['cat'] } );
db.things.insert( { type : [] } );
db.things.insert( { hello : []  } );
Run Code Online (Sandbox Code Playgroud)

我想得到独特的钥匙:

type, egg, hello
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

301
推荐指数
11
解决办法
18万
查看次数

为什么Python的数组会变慢?

我希望array.array比列表更快,因为数组似乎是未装箱的.

但是,我得到以下结果:

In [1]: import array

In [2]: L = list(range(100000000))

In [3]: A = array.array('l', range(100000000))

In [4]: %timeit sum(L)
1 loop, best of 3: 667 ms per loop

In [5]: %timeit sum(A)
1 loop, best of 3: 1.41 s per loop

In [6]: %timeit sum(L)
1 loop, best of 3: 627 ms per loop

In [7]: %timeit sum(A)
1 loop, best of 3: 1.39 s per loop
Run Code Online (Sandbox Code Playgroud)

可能是造成这种差异的原因是什么?

python arrays performance boxing python-internals

148
推荐指数
3
解决办法
2万
查看次数

包括所有现有字段并向文档添加新字段

我想定义一个$ project聚合阶段,我可以指示它添加一个新字段并包含所有现有字段,而不必列出所有现有字段.

我的文档看起来像这样,有很多字段:

{
    obj: {
        obj_field1: "hi",
        obj_field2: "hi2"
    },
    field1: "a",
    field2: "b",
    ...
    field26: "z"
}
Run Code Online (Sandbox Code Playgroud)

我想做一个像这样的聚合操作:

[
    {
        $project: {
            custom_field: "$obj.obj_field1",
            //the next part is that I don't want to do
            field1: 1,
            field2: 1,
            ...
            field26: 1
        }
    },
    ... //group, match, and whatever...
]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我可以使用类似"包含所有字段"的关键字,还是以其他方式避免必须单独列出每个字段?

mongodb mongodb-query aggregation-framework

109
推荐指数
4
解决办法
5万
查看次数

MongoDB的$ in子句是否保证订单

使用MongoDB $in子句时,返回文档的顺序是否始终对应于数组参数的顺序?

mapreduce mongoose mongodb mongodb-query aggregation-framework

73
推荐指数
6
解决办法
2万
查看次数

MongoDB 3.0中的"无法取消链接套接字文件"错误

我是MongoDB的新手.我正在尝试在Ubuntu 13.0 LTS上安装MongoDb 3.0,这是Windows 7主机上的VM.我已经成功安装了MongoDB(包等),但是当我执行命令时sudo service mongod start,我在"/var/log/mongodb/mongod.log"日志文件中收到以下错误.任何人都可以帮我理解这个错误.互联网上没有与此相关的内容.

2015-04-23T00:12:00.876-0400 I CONTROL*****SERVER RESTARTED*****2015-04-23T00:12:00.931-0400 E NETWORK [initandlisten]无法取消链接套接字文件/ tmp/mongodb -27017.soc k errno:1不允许操作2015-04-23T00:12:00.931-0400 I - [initandlisten]致命断言28578 2015-04-23T00:12:00.931-0400 I - [initandlisten]

mongodb ubuntu-13.04

61
推荐指数
6
解决办法
6万
查看次数

如何将pymongo.cursor.Cursor转换为dict?

我正在使用pymongo来查询区域中的所有项目(实际上是查询地图上某个区域中的所有场所).我db.command(SON())之前用过搜索球形区域,它可以返回一个字典,在字典中有一个叫做results包含场地的键.现在我需要搜索一个方形区域,我建议使用db.places.find,但是,这会给我一个pymongo.cursor.Cursor课程,我不知道如何从中提取场地结果.

有谁知道我是否应该将光标转换为字典并提取结果,或使用其他方法查询方形区域中的项目?BTW,db是pymongo.database.Database类

代码是:

>>> import pymongo
>>> db = pymongo.MongoClient(host).PSRC 
>>> resp = db.places.find({"loc": {"$within": {"$box": [[ll_lng,ll_lat], [ur_lng,ur_lat]]}}})
>>> for doc in resp:
>>>     print(doc)
Run Code Online (Sandbox Code Playgroud)

我有ll_lng,ll_lat,ur_lng和ur_lat的值,使用这些值,但它不打印此代码

python dictionary mongodb pymongo mongodb-query

51
推荐指数
3
解决办法
7万
查看次数

什么时候使用RabbitMQ铲和联盟插件?

对于我工作的公司,我们希望使用RabbitMQ作为我们的主要消息总线.我们的想法是每个应用程序都使用自己的vhost进行内部通信,通过铲子或联合插件,我们可以跨多个vhosts共享某些类型的事件(甚至可能是多台机器(非群集)) .我们选择每个vhost的应用程序将内部通信与公共事件分开,并保持每个应用程序的安全性可调.

基于在RabbitMQ网站上发布的信息,当我不得不选择铲子或者我必须选择联合插件时,我不会得到它.

RabbitMQ具有以下说明何时使用:

通常,当您需要比联合提供的更多控制时,您可以使用铲子在互联网上链接经纪人.

当我选择联邦时,我所缺少的铲子中的细粒控制是什么?

此时我想我更喜欢联合插件,因为我可以通过联合插件提供的REST API自动进行vhost间通信.在铲子的情况下,我需要更改铲子配置并在每次我们想要在vhost之间共享事件时重新启动RabbitMQ实例.我的想法是否正确?

我们目前在Windows上运行RMQ,客户端从.NET连接.在不久的将来,Java/Perl/PHP客户端将加入.

总结一下我的问题:

  • 当我
    选择联邦时,我所缺少的铲子中的细粒控制是什么?
  • 在使用铲子时更改vhost间通信的唯一方法是更改​​配置文件并重新启动实例是否正确?
  • 设置(每个应用程序的vhost)是否有意义,还是我完全忽略了这一点?

rabbitmq rabbitmq-shovel rabbitmq-federation

41
推荐指数
2
解决办法
2万
查看次数

MongoDB'无法找到$ geoNear查询的索引'

我只是想让一个简单的near查询工作.这是我的文档样本.

{"point": 
  {"type": "Point", 
     "coordinates": [30.443902444762696, -84.27326978424058]}, 
   "created_on": {"$date": 1398016710168}, 
   "radius": 180, 
   "user": {"$oid": "53543188eebc5c0cc416b77c"}, 
   "_id": {"$oid": "53544306eebc5c0ecac6cfba"}, 
   "expires_on": {"$date": 1399831110168}
}
Run Code Online (Sandbox Code Playgroud)

和mongod我尝试了命令:

db.bar.find({point: {$near: [-84.26060492426588, 30.45023887165371]}});
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

错误:{"$ err":"无法执行查询:错误处理查询:ns = foo.bar skip = 0 \nTree:GEONEAR field = point maxdist = 1.79769e + 308 isNearSphere = 0 || First:notFirst:full path :point \nSort:{} \nProj:{} \n planner返回错误:无法找到$ geoNear查询的索引","代码":17007}

也许我的谷歌今天不是那么尖锐,但我找不到任何东西.另外,我运行了ensure index命令.我的意图是这些是地图位置.

db.bar.ensureIndex({a:1});
db.bar.ensureIndex({geo:"2d"});
Run Code Online (Sandbox Code Playgroud)

geospatial mongodb mongodb-query

38
推荐指数
3
解决办法
4万
查看次数