【问题标题】:Multi-field scala/casbah query多字段 scala/casbah 查询
【发布时间】:2015-09-22 15:28:26
【问题描述】:

我正在尝试构建一个多字段查询。

我的收藏由很多文档组成,如下所示:

{
    "_id" : ObjectId("5601711160b2abcf7ff24b46"),
    "id_a" : "43d366a9-a39b-4d49-98ce-369739471b6b",
    "id_thing" : -1,
    "data" : {
        "info1" : 36.0709427,
        "date" : "2005-11-01T00:33:21.987+07:00",
        "info2" : 24563.87148077
    }
}

我没有找到使用casbahscala 中查询对应于:id_thing -> -1data.info1 -> 36.0709427 的文档的方法。

注意:我不知道如何将ISODate 推送到数据库。

【问题讨论】:

    标签: mongodb scala casbah querying


    【解决方案1】:

    您应该使用 MongoDBObject 来形成查询并将其传递给 find 方法,如下所示:

    //create mongo connection. This might be different in your case
    val server = MongoClientURI("mongodb://localhost:27017")
    private val client = MongoClient(server)
    val database = client(DATABASE)
    //This is what you require
    val collection = ScalaMongoFactory.database("collectionName")
    val cursor = collection.find(MongoDBObject("id_thing" -> -1,"data.info1" -> 36.0709427)).toList
    
    println("output: " + cursor)
    

    希望这对你有帮助。

    【讨论】:

    • 谢谢。这是我现在所做的:val q = MongoDBObject.newBuilderq += "id_thing" -> -1q += "data.info1" -> 36.0709427val res = knowledge_db.find(q.result)。但是,一旦我尝试添加一些运算符,它就会抛出type mismatch 的错误,请参阅:q += "data.info2" $gte 2000。如何在查询中添加运算符?
    • @wipman 为什么要使用new Builder 方法和字符串来形成查询?没必要这样做。您可以简单地使用 MongoDBObjectcom.mongodb.casbah.commons 包。如果您想找出data.info > 10,那么只需使用collection.find(MongoDBObject("id_thing" -> -1,"data.info1" -> MongoDBObject("$gte" ->36.0709427))).toList
    • 再次感谢。关于这个的最后一个问题:是否可以从StringMongoDBObject,例如:MongoDBObject(operator_string -> val)
    • @wipman 我没有收到你的问题。但是你可以做所有你可以用 mongo shell 做的事情。
    • 像我对MongoDBObject.newBuilder 所做的那样:为我的query 构建顺序内容。例如:my_query = something,然后是my_query +=/->/++ something_new
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多