Python 具有更宽密钥的MongoDB搜索

Python 具有更宽密钥的MongoDB搜索,python,mongodb,Python,Mongodb,不确定mongo是否是这里的最佳解决方案,或者这是否可行: 我有一份文件: { u'action': [ { u'url': u'http://foo.com', u'payload': { u'action': u'EndCall' }, u'timer': 0 }, { u'url': u'http://foo.com', u'payload': {

不确定mongo是否是这里的最佳解决方案,或者这是否可行:

我有一份文件:

{
  u'action': [
    {
       u'url': u'http://foo.com',
       u'payload': {
         u'action': u'EndCall'
       }, 
       u'timer': 0
    },
    {
       u'url': u'http://foo.com', 
       u'payload': {
         u'action': u'EndCall'
       },
       u'timer': 0
    }
  ],
  u'pattern': {u'c': 3, u'b': 2, u'd': 4}
}
它实际上是一个键/值对,其中模式是关键,行动是价值

现在,假设我想在使用包含模式以及一些其他值(未知且不相关)的字符串进行搜索时检索此值/文档

例如,我的搜索字符串应该与上面的匹配为:

query = {"a": 1, "b" : 2, "c" : 3, "d" : 4, "e" : 5 }
因此,中间部分与模式值匹配,但我不知道可以删除哪些值以获得精确匹配(例如a&e)


该应用程序是用Python编写的,因为我目前正在Mongo中尝试这一点,但很乐意探索任何其他解决方案。

关于我能想到的唯一方法,让查询成为一系列或类似以下选项:

db.foo.find( { $or : [ { "a" : 1 } , { "b" : 2 }, { "c" : 3 }, { "d" : 4 }, { "e" : 5 } ] } )

这应该行得通,因为您实际上是在“pattern”节点的任何部分中查找这些值。

文档中的所有“u”代表什么?@MikeBrant,“u”是unicode字符串的Python语言文字。我想您是在找$subset运算符?JIRA中存在添加此操作员的改进请求。请随时跟踪、投票或评论这张票子:但如果其中任何一个值匹配,这会匹配吗?因此,如果字符串有{“b”:2,“c”:“dog”},仍然会返回吗?@SamMachin是的,这是正确的。但您的示例有点武断,因为您的“模式”节点与搜索查询的内部部分匹配。是否需要应用任何其他逻辑,例如需要匹配搜索查询的3个连续部分或类似的内容?是的,对不起,我有点模糊,查询需要包含键中的所有值,并且可能包含其他值。谢谢。@SamMachin如果您的搜索字符串不会动态更改,您当然可以构建一个更复杂的
$或
语句,包含不同的可能组合,但我猜这对您没有帮助。实际上,您要做的是一种与典型的查找操作相反的操作,在这种操作中,您要根据文档对象中的子字符串在搜索字符串中“查找”一个值。听起来你可能需要重新考虑数据结构,以便做你想做的事情。是的,我认为这是在改变整个查询模型,不幸的是,建立or字符串是不实际的,因为查询字符串可能是巨大的。无论如何谢谢你的帮助