我有一个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中,是否可以使用另一个字段中的值更新字段的值?等效的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集合中所有键的名称.
例如,从这个:
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) 我希望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)
可能是造成这种差异的原因是什么?
我想定义一个$ 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 $in子句时,返回文档的顺序是否始终对应于数组参数的顺序?
mapreduce mongoose mongodb mongodb-query aggregation-framework
我是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]
我正在使用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的值,使用这些值,但它不打印此代码
对于我工作的公司,我们希望使用RabbitMQ作为我们的主要消息总线.我们的想法是每个应用程序都使用自己的vhost进行内部通信,通过铲子或联合插件,我们可以跨多个vhosts共享某些类型的事件(甚至可能是多台机器(非群集)) .我们选择每个vhost的应用程序将内部通信与公共事件分开,并保持每个应用程序的安全性可调.
基于在RabbitMQ网站上发布的信息,当我不得不选择铲子或者我必须选择联合插件时,我不会得到它.
RabbitMQ具有以下说明何时使用:
通常,当您需要比联合提供的更多控制时,您可以使用铲子在互联网上链接经纪人.
当我选择联邦时,我所缺少的铲子中的细粒控制是什么?
此时我想我更喜欢联合插件,因为我可以通过联合插件提供的REST API自动进行vhost间通信.在铲子的情况下,我需要更改铲子配置并在每次我们想要在vhost之间共享事件时重新启动RabbitMQ实例.我的想法是否正确?
我们目前在Windows上运行RMQ,客户端从.NET连接.在不久的将来,Java/Perl/PHP客户端将加入.
总结一下我的问题:
我只是想让一个简单的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) mongodb ×8
python ×2
arrays ×1
boxing ×1
dictionary ×1
geospatial ×1
mapreduce ×1
mongoose ×1
performance ×1
pymongo ×1
rabbitmq ×1
ubuntu-13.04 ×1