小编Kar*_*rak的帖子

$ unwind empty array

我有一组用户,每个文档都有以下结构:

{
  "_id": "<id>",
  "login": "xxx",
  "solved": [
    {
      "problem": "<problemID>",
      "points": 10
    },
    ...
  ]
}
Run Code Online (Sandbox Code Playgroud)

该字段solved可能为空或包含任意多个子文档.我的目标是获得一个用户列表以及总分(总和points),其中尚未解决任何问题的用户将被分配总分为0.这是否可以通过单个查询执行此操作(理想情况下使用聚合框架)?

我试图在聚合框架中使用以下查询:

{ "$group": {
  "_id": "$_id",
  "login": { "$first": "$login" },
  "solved": { "$addToSet": { "points": 0 } }
} }
{ "$unwind": "$solved" }
{ "$group": {
  "_id": "$_id",
  "login": { "$first": "$login" },
  "solved": { "$sum": "$solved.points" }
} }
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

exception: The top-level _id field is the only field currently supported for exclusion
Run Code Online (Sandbox Code Playgroud)

先感谢您

mongodb aggregation-framework

22
推荐指数
2
解决办法
2万
查看次数

Mapper与Record/Squeryl

我即将在Lift框架中开始我的第一个项目,我必须决定选择哪个持久性库.我即将使用关系后端,因此Mapper和Record都可以发挥作用.

在Mapper的情况下 - 我最想念的是能够控制发送到RDBMS的查询 - 特别是当涉及更复杂的查询时,这些查询将通过SQL中的连接,聚合等来解决.举几个例子 - 让我们有两个实体:

class BaseProduct extends LongKeyedMapper[BaseProduct] with IdPK {
  // some fields
}
object BaseProduct extends BaseProduct with LongKeyedMetaMapper[BaseProduct]

class MyProduct extends LongKeyedMapper[MyProduct] with IdPK {
  // some fields
  object base extends MappedLongForeignKey(this, BaseProduct)
}
object MyProduct extends MyProduct with LongKeyedMetaMapper[MyProduct]
Run Code Online (Sandbox Code Playgroud)

其中MyProduct一个BaseProduct实体的专业化.这些实体之间显然存在一对一的关系.然而,我想出的最好的可能性是MyProduct与它一起查询确切的BaseProduct是这样的查询:

MyProduct.findAll(PreCache(MyProduct.base))
Run Code Online (Sandbox Code Playgroud)

哪个发出两个查询(而且我担心我无法控制MyProduct我想要选择的实体的哪些字段.

对Mapper库来说已经够糟了.我对Record/Squeryl API的主要关注是它缺少ProtoMapper API周围存在的所有类.是否有一些接近这些类的功能的记录?是否可以访问Squeryl中的数据库特定功能(例如PostgreSQL中的几何查询)?

这些层中的任何一层都有其他优缺点吗?还是有,如果我想有与数据库和通信体面类型安全的封装将提供体面的控制权查询(我是用来发出直接使用PHP的PDO层查询这将值得关注任何其他抽象层 - 我不想要这样的直接查询界面,但是控制查询的一些可能性很大.与Lift框架的集成绝对是一个优势.

谢谢!

scala lift squeryl

3
推荐指数
1
解决办法
496
查看次数

从List [Int]到List [Double]的隐式转换失败

我是斯卡拉新手,我注意到了一个我不明白的行为.当我执行此代码时,一切都很顺利:

val lD: List[Double] = List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

但是当我执行这个时:

val lI = List(1, 2, 3)
val lD: List[Double] = lI
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

<console>:11: error: type mismatch;
 found   : List[Int]
 required: List[Double]
Run Code Online (Sandbox Code Playgroud)

请您告诉我为什么在第二个列表中没有进行隐式转换?

scala implicit-conversion

2
推荐指数
2
解决办法
2589
查看次数