我试图使用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编写的,我就不会遇到这个问题,但我想找到这样的解决方案。