具有现有值的MongoDB选择

时间:2012-11-28 08:23:58

标签: mongodb pymongo database nosql

我正在使用PyMongoMongoDB获取数据。集合中的所有文档都类似于以下结构:

{
    "_id" : ObjectId("50755d055a953d6e7b1699b6"), 
    "actor":
    {
        "languages": ["nl"]
    },
    "language":
    {
        "value": "nl"
    }
}

我正在尝试获取属性language.value内属性actor.languages的所有会话。

目前,我知道如何在actor.languages内查找具有常量值的所有会话(例如actor.languages内与 en 的所有会话。)

但我仍然坚持如何在当前文档中对变量值(language.value)进行相同的比较。

欢迎任何帮助,提前谢谢!

2 个答案:

答案 0 :(得分:1)

db.testcoll.find({$where:"this.actor.languages.indexOf(this.language.value) >= 0"})

答案 1 :(得分:1)

如果你的查询集很小,你可以使用$where,但任何实际大小都可以开始看到问题,特别是因为这个查询看起来像需要在页面和JS上实时运行的查询引擎是单线程的其他问题。

我实际上认为在这种情况下更好的方法是通过客户端,它非常直接,根据其中一个值拉出记录,迭代并测试它们的条件双值(即基于{{拉出) 1}}为nl并测试前一个值的language.value。)

我想你可以用聚合框架做到这一点,但是,在最小的时候你不能在actor.languages中使用计算字段。我想它会是这样的:

$match

如果可以的话。但可能有办法。