首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Salat和嵌入式MongoDb文档

Salat和嵌入式MongoDb文档
EN

Stack Overflow用户
提问于 2012-09-07 11:26:55
回答 1查看 635关注 0票数 0

我有一个由2个嵌入文档组成的case类,其中一个是列表。我在检索列表中的项目时遇到一些问题。

下面是我的代码:

代码语言:javascript
复制
package models

import play.api.Play.current
import com.novus.salat._
import com.novus.salat.dao._
import com.mongodb.casbah.Imports._
import se.radley.plugin.salat._
import com.novus.salat.global._

case class Category(
  _id: ObjectId = new ObjectId,
  category: Categories,
  subcategory: List[SubCategories]
)

case class Categories(
  category_id: String,
  category_name: String
  )

case class SubCategories(
  subcategory_id: String,
  subcategory_name: String
)

object Category extends ModelCompanion[Category, ObjectId] {
  val collection = mongoCollection("category")
  val dao = new SalatDAO[Category, ObjectId](collection = collection) {}
  val CategoryDAO = dao

  def options: Seq[(String,String)] = {
    find(MongoDBObject.empty).map(it => (it.category.category_id, it.category.category_name)).toSeq
  }

  def suboptions: Seq[(String,String,String)] = {
    find(MongoDBObject.empty).map(it => (it.category.category_id, it.subcategory.subcategory_id, it.subcategory.subcategory_name)).toSeq
  }
}

我得到了错误:value subcategory_id is not a member of List[models.SubCategories],这对我来说没有任何意义。

EN

回答 1

Stack Overflow用户

发布于 2012-09-07 15:47:27

您正在执行以下操作:

代码语言:javascript
复制
def suboptions: Seq[(String,String,String)] = {
  find(MongoDBObject.empty).map(category => {
    val categories: Categories = category.category
    val categoryId: String = categories.category._id
    val subcategory: List[Subcategory] = category.subcategory
    val subcategoryId: String = subcategory.subcategory_id //here you are trying to 
      //get id from list of subcategories, not one of them
    val subcategoryName: String = subcategory.subcategory_name //same here
    (categoryId, subcategoryId, subcategoryName)).toSeq  
  }
}

顺便说一句。在Scala中使用snake_case非常少见,val/var名称应该在camelCase中,请参阅this

编辑:您可以通过执行以下操作来使其变得简单:

代码语言:javascript
复制
case class Category(
  _id: ObjectId = new ObjectId(), 
  id: String,
  name: String,
  subcategories: List[Subcategory]
)
case class Subcategory(
  id: String,
  name: String
)
//not tested
def suboptions: Seq[(String, String, String)] = {
  val categories = find(MongoDBObject.empty)
  for{
    category <- categories;
    subcategory <- category.subcategories
  } yield (category.id, subcategory.id, subcategory.name)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12311312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档