温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mongodb的通配符查询的一次失败经验

发布时间:2020-05-30 12:41:52 来源:网络 阅读:2722 作者:sharpstill 栏目:MongoDB数据库
我想find到mongo中的synonym_titles下面的嵌套子json下的影片名字段或者real_titles下面的嵌套子json下的影片名字段:


mongodb的通配符查询的一次失败经验


但是1,2这个info信息字段不确定
所以我想这么查询:
db.search_correct_synonym.find({"synonym_titles.*":"联邦调查局"})
但是失败了,这种查询是告诉mongo,我想找到无论哪一个field,只要包含value=联邦调查局的field


最后的办法,想要找到指定的片名,可以把这些片名copy出来放到一个独立的field里,比如all_titles:["联邦调查局", "帅哥在一九二五"],可以对该字段建索引。
这样就能根据db.search_correct_synonym.find({"all_titles":"联邦调查局"})找到了


详见http://stackoverflow.com/questions/6179871/mongodb-wildcard-in-the-key-of-a-query

As asked, this is not possible. The server issue you linked to is still under"issues we're not sure of".

MongoDB has some intelligence surrounding the use of arrays, and I think that's part of the complexity surrounding such a feature.

Take the following querydb.foo.find({ 'a.b' : 4 } ). This query will match the following documents.

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

So what does "wildcard" do here?db.foo.find( { a.* : 4 } )Does it match the first document? What about the second?

Moreover, what does this mean semantically? As you've described, the query is effectively"find documents where any field in that document has a value of 4". That's a little unusual.

Is there a specific semantic that you're trying to achieve? Maybe a change in the document structure will get you the query you want.








thanks, that clarifies. More specifically, what I'm looking to do is wildcard just the specific node in the branch, i.e. any proper subfield of a. I'm not clear on how a.* says 'find where any field'. Isn't it 'find documents that have a top-level field 'a' with a subfield that matches 4'? – BradJun 1 '11 at 5:48

I think the confusion here is around "subfield". When I write{a:{b:4,c:2}}, I am saying that the valueais a JSON object. That JSON object has two keysbandc. The value of those keys are 4 & 2 respectively. When you are asking fora.*, you're effectively asking for syntax that loops through all of the keys in that JSON object. Your're not asking to"loop through an array", you're asking to"loop through an object's properties". That's a little unusual, which is why I'm asking for a specific use case here. – Gates VPJun 1 '11 at 17:15

@gates: I have a use case. myDocInMongo = {'someUnknownKey':{propToCheck:true}, 'someKnownKey':true}; Now, I want to find this document using the selector {someKnownKey:{$exists:true}} but i also want to make sure that none of the other keys have an object with the property propToCheck. So, like the following: {'*.propToCheck':{$exists:false}, {someKnownKey:{$exists:true}}} – doubletapMay 3 '12 at 17:57


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI