使用弹簧数据写入mongodb时的奇怪行为

时间:2015-04-22 07:35:24

标签: java spring mongodb

我试图使用mongodb的弹簧数据写一些数据,我遇到了一个有趣的问题,我不确定为什么会发生。

我在scala中编写了以下mongo配置:

object MongoConfig {
  val SERVER = "localhost"
  val PORT = 27017
  val DB_NAME = "test"
  val COLLECTION = "test"
}

@Configuration
class MongoConfig extends AbstractMongoConfiguration {

  def getDatabaseName: String = MongoConfig.DB_NAME
  def mongo: Mongo = new MongoClient(MongoConfig.SERVER, MongoConfig.PORT)
}

然后我有以下DAO类:

@Repository
class TrackDao {

  @Autowired
  private var mongoOp: MongoOperations = _

  def save(data: java.util.List[Data]) = {
    val t = new DataDto(data.asScala, "some data")
    mongoOp.save(t, MongoConfig.COLLECTION)
  }
}

之后我尝试从java中写入数据库:

private void write() {
   List<Data> data = // some data
   mongoDao.save(data)
}

最后一个代码有效,但如果我尝试这样做:

private void write() {
   List<Data> data = // some data
   List<Data> data1 = data.sublist(0, 3);
   mongoDao.save(data1);
}

我收到以下错误:

Document field names can't start with '$' (Bad Key: '$outer')

还有Data java对象:

public class Data {
   private int x;
   //
}

DataDto:

case class DataDto(data: Buffer[Data], label: String) {
  def getData: Buffer[Data] = data
  def getLabel: String = label
}

对我来说,这真是一个奇怪的问题。可能如果所有代码都是用Java编写的,我就不会遇到这个问题,但我想找到这样的解决方案。

0 个答案:

没有答案