为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB通配符是查询的关键

/ 猿问

MongoDB通配符是查询的关键

慕后森 2019-08-28 14:37:26

MongoDB通配符是查询的关键

是否可以在查询中对密钥进行通配符?例如,给出以下记录,我想做一个.find({'a.*': 4}) 这在这里讨论https://jira.mongodb.org/browse/SERVER-267,但看起来它没有得到解决。

{
  'a': {
    'b': [1, 2],
    'c': [3, 4]
  }}


查看完整描述

3 回答

?
绝地无双

如所述,这是不可能的。您链接到的服务器问题仍然存在“我们不确定的问题”

MongoDB有一些关于数组使用的智能,我认为这是围绕这种功能的复杂性的一部分。

请执行以下查询db.foo.find({ 'a.b' : 4 } )。此查询将与以下文档匹配。

{ a: { b: 4 } }{ a: [ { b: 4 } ] }

那么“通配符”在这里做什么?db.foo.find( { a.* : 4 } )它与第一份文件相符吗?那第二个怎么样?

而且,这在语义上意味着什么?如您所述,查询实际上是“查找文档中任何字段的值为4的文档”。这有点不寻常。

您是否尝试实现特定的语义?也许文档结构的更改将为您提供所需的查询。


查看完整回答
反对 回复 2019-08-28
?
皈依舞

我有一个用例。myDocInMongo = {'someUnknownKey':{propToCheck:true},'someKnownKey':true}; 现在,我想使用选择器{someKnownKey:{$ exists:true}}来查找此文档,但我还想确保其他任何键都没有具有属性propToCheck的对象。所以,如下所示:{'* .propToCheck':{$ exists:false},{someKnownKey:{$ exists:true}}} 

查看完整回答
反对 回复 2019-08-28
?
收到一只叮咚

我认为这里的混乱是围绕“子领域”。当我写{a:{b:4,c:2}},我说这个值a是一个JSON对象。那个JSON对象有两个键bc。这些键的值分别为4和2。当你要求时a.*,你有效地要求语法循环遍历该JSON对象中的所有键。你不是要求“循环一个数组”,而是要求“遍历一个对象的属性”。这有点不寻常,这就是我在这里要求一个特定用例的原因。

查看完整回答
反对 回复 2019-08-28

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信