@Entity("trackers")
public class Tracker {
@Id
private ObjectId id;
private String ican;
@Embedded
private List<Day> days;
//getters, setters & constructors
}
@Embedded
public class Day {
private LocalDate date;
@Embedded
private List<GeoStamp> geoStamps;
//getters, setters & constructors
}
@Embedded
public class GeoStamp {
private Date dateTime;
private double latitude;
private double longitude;
//getters, setters & constructors
}
{
"_id" : ObjectId("58ee636b44e7ed48200ee8d4"),
"className" : "com.model.Tracker",
"ican" : "NL 12346",
"days" : [
{
"date" : ISODate("2017-04-11T22:00:00Z"),
"geoStamps" : [
{
"dateTime" : ISODate("2017-04-12T17:27:07.249Z"),
"latitude" : 23.2222,
"longitude" : 44.333
},
{
"dateTime" : ISODate("2017-04-12T17:27:07.249Z"),
"latitude" : 23.2222,
"longitude" : 44.333
},
{
"dateTime" : ISODate("2017-04-12T17:27:07.249Z"),
"latitude" : 23.2222,
"longitude" : 44.333
}
]
},
{
"date" : ISODate("2017-01-01T23:00:00Z"),
"geoStamps" : [
{
"dateTime" : ISODate("2017-04-12T17:27:07.249Z"),
"latitude" : 23.2222,
"longitude" : 44.333
},
{
"dateTime" : ISODate("2017-04-12T17:27:07.249Z"),
"latitude" : 23.2222,
"longitude" : 44.333
},
{
"dateTime" : ISODate("2017-04-12T17:27:07.249Z"),
"latitude" : 23.2222,
"longitude" : 44.333
}
]
}
]
}
现在我想做的是将一个GeoStamps列表推送到Mongo中的GeoStamphtml" target="_blank">数组,在那里我首先过滤跟踪器的ObjectId或它的iCAN。然后在文档中发现我需要按日过滤,所以我不会将GeoStamp列表添加到分布在多个日期的多个GeoStamp数组中。
我想可以用下面的方法来做:
我的查询(是的,我知道retrievedFields是不推荐的,我不想使用它,但这是我最接近工作的解决方案):
final Query<Tracker> trackerQuery = datastore.find(Tracker.class)
.filter("_id", id)
.filter("days.date", LocalDate.now())
.retrievedFields(true, "days.$");
final UpdateOperations<Tracker> trackerUpdate = datastore.createUpdateOperations(Tracker.class).push("days.geoStamps", newGeoStamps);
final UpdateResults trackerUpdateResults = datastore.update(trackerQuery, trackerUpdate);
写入失败,错误代码为16837,错误消息“不能使用部分(days of days.geostamps)遍历元素({days:[{日期:新日期(1491948000000),地理戳:[{日期:新日期(1492019739661),纬度:23.2222,经度:44.333},{日期:新日期(1492019739661),纬度:44.333},{日期:新日期(1492019739661),纬度:23.2222,经度:44.333}]},{日期:新日期(1483311600000),地理戳:[{日期:新日期(1492019739661),纬度:23.2222,经度:44.333},地理戳:[{日期:新日期(1492019739661),纬度:44.333}时间:新日期(1492019739661),纬度:23.2222,经度:44.333},{datetime:新日期(1492019739661),纬度:23.2222,经度:44.333}]})‘
你在错误中看到的纬度和经度是我试图插入的。
关于如何实现这一点有什么想法吗?
结果我实际上并没有推到一个数组,下面是:
final UpdateOperations<Tracker> trackerUpdate = datastore.createUpdateOperations(Tracker.class).push("days.geoStamps", newGeoStamps);
应该是:
final UpdateOperations<Tracker> trackerUpdate = datastore.createUpdateOperations(Tracker.class)
.push("days.$.geoStamps", newGeoStamps);
希望这可能对将来的人有所帮助!
如果我有一个数据,其结构类似于集合中的单个文档: 有没有办法通过id“childid”搜索嵌入的文档?因为mongo没有索引嵌入文档的_id字段(如果我在这里错了,请纠正我),因为这个查询不起作用:db。收集查找({u id:“childid”}); 另外,请告知我是否有任何其他文档数据库适用于这种树结构的检索数据,其中要求: 查询子级而不必发出联接 查找树中的任何节点的速度与查找根节点的速度一样
我正试图通过Morphia在mongodb中保存一个文档列表。 我想要的是,如果列表包含一个重复的测试实体,不要插入它,而是继续添加REST。 是否可以使用方法?
问题内容: 我正在尝试将文档插入Node.js中的MongoDB中。我已经从数据库中成功读取了文件,并通过命令行界面添加了文档。但是,我无法从JavaScript插入文档。如果这样做,我会收到一个错误: 错误:没有提供的回调无法使用writeConcern 这是我的代码: 我无法终生弄清楚为什么会出现此错误。 我做错了什么,我应该怎么做呢? 问题答案: 您需要为调用提供回调函数,以便该方法可以将插
主要内容:insert() 与 save() 方法,insertOne() 方法,insertMany() 方法前面我们已经介绍了如何在 MongoDB 中 创建数据库和 创建集合,接下来我们再来介绍一下如何在集合中插入文档。文档是 MongoDB 中数据的基本单位,由 BSON 格式(一种计算机数据交换格式,类似于 JSON)的键/值对组成。 insert() 与 save() 方法 您可以使用 MongoDB 中的 insert() 或 save() 方法向集合中插入文档,语法如下: db.
问题内容: 我的文档中具有以下结构: 我想更新 someField 和 someField2, 但仅更新数组中的一项,与 _arrayId 匹配的 项 (例如;并且仅针对此文档(例如)),而不更新其他项。 该 arrayIds 是不是唯一的,这就是为什么我需要它是针对特定文档的文档。如果要为数组中存在的每个文档更新该值,则可以使用,但这不是我想要的。 我试图在Java中完成此操作,但也可以使用命令
在我的问题的答案中给出了如何使用Mongoose来使用新的运算符的很好的解释。建议的解决方案非常适合简单的数组。如果数组在子文档中或数组的每个元素都是数组,则建议的解决方案不起作用。我的意思是这样的: