2012-09-24 50 views
1

我試圖用id來找到MongoDB中的值:如何通過Id在MongoDB中查找元素? (斯卡拉/升降機)

var id = S.param("id") openOr "" 
val qry = QueryBuilder.start("id").is(id).get 
def render = { 
    val items = Delegacja.findAll(qry) 

    ".my_list *" #> items.map(e => 
     ".my_list_item" #> <li>{e.gdzie_od1}</li> & 
     ".my_list_item_id" #> <li>{e.id}</li> 
    ) 
} 

型號:

package code.model 
import _root_.net.liftweb.record.field._ 
import net.liftweb.mongodb.record._ 
import net.liftweb.mongodb.record.field.ObjectIdPk 

class Delegacja private() extends MongoRecord[Delegacja] with ObjectIdPk[Delegacja]{ 
    def meta = Delegacja 

    object gdzie_od1 extends StringField(this, 30) 
    object gdzie_do1 extends StringField(this, 30) 
    object data_od1 extends StringField(this, 500) 
    object data_do1 extends StringField(this, 500) 
} 

object Delegacja extends Delegacja with MongoMetaRecord[Delegacja] 

或只是val items = Delegacja.find("Id" -> id)val items = Delegacja.find("Id" -> id.toString)val items = Delegacja.find("id", id)並沒有什麼發現,ID爲好,當我通過某個名字看它的確定,但通過ID沒有結果.. 有人可以告訴我我做錯了什麼嗎?


嗯我覺得有一些線索。 (和真正find變化id_id;))

當我這樣做:

val md1 = Delegacja.createRecord.gdzie_od1(gdzie_od1).gdzie_do1(gdzie_do1).save 
S.notice(md1.id.is.toString) 
val md = Delegacja.find("_id", md1.id.is.toString) 
S.notice(md.is.toString) 

我從S.notice(md.is.toString)Empty但是當我改變val md = Delegacja.find("_id", md1.id.is.toString)val md = Delegacja.find("_id", md1.id.is)是OK所以在viewitem.scala我需要以某種方式轉換string (id)我得到作爲參數鏈接到oibjectid,如何處理它?

class ViewItem { 

    var id = S.param("id") openOr "" 
      val qry = QueryBuilder.start("_id").is(id).get 
    def render = { 

    val items = Delegacja.find("_id", id) // THIS id.ToObjectIdPK some how .. 
    S.notice(items.toString) 

    ".my_list *" #> items.map(e => 
     ".my_list_item" #> <li>{e.gdzie_od1}</li> & 
     ".my_list_item_id" #> <li>{e.id}</li> 
    ) 
    } 
... 
} 

回答

1

意思啊,而我得到的答案:

需要新的進口:

import org.bson.types.ObjectId 

和:

val items = Delegacja.find("_id", new ObjectId(id)) 

這是需要conersion]