0

我有一个带有 lineItems 'list' 的MondoDB Collection 'quotes' .. 如下所示...

db.quotes.find();

> { "_id" : "51d31c4a0364a1b7f7cf45f7", 
    "accountName" : "NewAccountName", 
    "className" : "com.db.model.Quote",
    "cost" : "0",
    "lineItems" : [ { "lineNo" : 1, "product" : { "sku" : "MW216", "description" : "JBoss EAP", "cost" : "1043.5" }, "quotePrice" : "1230",     "quantity" : 4 },
                    { "lineNo" : 2, "product" : { "sku" : "MW217",  "description" : "JBoss EDS, "cost" : "15178.18"}, "quotePrice" : "0",   "quantity" : 3} ],
    "quoteNumber" : "22005",
    "shipping" : "GROUND"
}

我正在使用如图所示的MongoDB查询..

{
  'collectionName' : 'quotes',
  'findQuery' : {
      $where : "this.quoteNumber == $P!{QuoteNo}"
 }}

我想将每个 lineItem 显示为一行。

lineNo | sku   | Description       
1      | MW216 | JBoss EAP  
2      | MW217 | JBoss EDS  

如何在JasperReports中使用iReport Designer 进行设计?

目前,当使用报告检查器中的“lineItems”字段并将其放置在报告中时,会将列表中的所有内容显示为一个对象。我正在尝试读取列表中的每个字段并将其显示在按 lineItems 分组的报告中,如上所示。

任何帮助或线索将不胜感激,感谢您花时间帮助我。

4

1 回答 1

1

首先,您绝对不应该使用 $where - 而不是$where : "this.quoteNumber == $P!{QuoteNo}"您应该简单地使用db.quotes.find({quoteNumber:YOURQUOTENO})它将在服务器上执行正常的 MongoDB 查询,而不是生成 Javascript shell 来执行$where语句。

如果您想单独查看每个行项目,您可以使用$unwind如下聚合框架:

db.quotes.aggregate({$unwind:"$lineItems"})

这将为每个 lineItem 返回一个文档,因此如果您有五个文档,每个文档在数组中有三个 lineItem,您将返回 15 个文档。

于 2013-07-04T20:04:52.103 回答