比较来自世界各地的卖家的域名和 IT 服务价格

MongoDb $and 具有地理空间请求的操作员

我在系统中工作 Java, 其中部分从内部提交到请求中显示表达式 MongoDb. 我想象一下 "AND" 表达式就像我想象的 "OR" 表达。 因此,如果我有一种表达式 "category='GIBBLY' AND active=true", 它将显示如下:


{$and:[{"category":"GIBBLY"},{"active":true}]}


我理解在这种情况下,没有特别需要。 我无法理解的是什么

某物

案例 $and 需要 /在我的系统中通常会被投资 ANDs 和 ORs, 如果它有一些价值/.

这对我来说是一个问题的原因是运营商 $and, 它似乎不适用于地理空间请求。 这样的请求:


{"$and":[{"loc":{"$nearSphere":[-79.75 , 43.5], "$maxDistance":0.00156787}}, {"active":true}]}


结束错误 "can't find special index: 2d". 如果我 re-do 请求为:


{"loc":{"$nearSphere":[-79.75 , 43.5], "$maxDistance":0.00156787}, "active":true}


它很棒。

我试图花一些研究,并找到了对这个问题的讨论。
[/url]
, 这提到了讨论
http://www.mongodb.org/display ... dexes
.

我发现的信息都没有解释为什么 $and 它不适用于地理空间请求。 我的数据库和请求中没有定义复合索引 non-$and 作品,所以我不确定 $and 它与索引有关的方式不同。

总结,我的问题如下::

你完全需要吗? $and, 如果是这样,在什么情况下?

谎言不同 $and 与指数相关隐式呈现的一些基本途径?

为什么究竟 $and 不适用于地理空间请求?
已邀请:

窦买办

赞同来自:

你完全需要吗? $and, 如果是这样,在什么情况下?

有经典 SQL


SELECT * FROM Table
WHERE /x = 1 OR y = 0/
AND /w = 1 OR z = 0/


在操作员的外观之前
$and

这很困难。 您无法执行以下操作:


db.Table.find/{$or: [{x:1},{y:0}] , $or: [{w:1},{z:0}]}/


询问 "looks" 正确但它无效 JSON. 您会注意到我有两个顶级键
$or

. 这个逗号应该代表 "and", 但在这种情况下,它不起作用。

操作员
$and

旨在解决这个问题。

谎言不同 $and 与指数相关隐式呈现的一些基本途径?

它必须在相同的基本查询中编译并使用相同的索引。 如果没有,那绝对是一个错误。

为什么究竟 $and 不适用于地理空间请求?

您所看到的行为可能是一个错误,必须报告:
http://jira.mongodb.org/
/

另外,请不要忘记 MongoDB 它对地理空间索引具有特殊限制。 也许你的请求不使用索引理想的方式。

小明明

赞同来自:

根据您的第一个问题,在您指定时,查询中的逗号使用是隐式的 "and":


db.collection.find/{name: "Jenna", number: 1}/


操作员 $and 当您需要在一个字段中放置多个过滤器时,需要我们需要的,这是使用分号语法不可能的。 例如,要查找包含包含数字数组的所有文档 2



10, 您需要操作员 $and:

文件:


{_id: 1, array: [1, 10]}
{_id: 2, array: [2, 10]}


询问:


> db.collection.find/{$and: [{array: 2}, {array: 10}]}/
{_id: 2, array: [2, 10]}


虽然没有运营商的请求 $and 只使用 "array: 10" 并返回两种文件:


> db.collection.find/{array: 2, array: 10}/
{_id: 1, array: [1, 10]}
{_id: 2, array: [2, 10]}


使用操作员 $and 应该对索引没有影响。 一个索引将用于满足请求。

请随时投票给机票 JIRA, 相关 $and 和地理空间请求,如果它会影响您的请求。

要回复问题请先登录注册