b)“Units”字段包含带有“period”字段的子文档(日期对象数组),其中给定的日期位于数组中的第一和第二元素之间。
数据结构如下所示:
{
"_id" : ObjectId("5984bdfdb3ac279e39f156d4"),
"surname" : "Dare",
"firstname" : "Dan",
"units" : [{
"period" : [
ISODate("2018-01-01T00:00:00.000Z"),
ISODate("2019-12-31T00:00:00.000Z")
],
"unit" : {
"unit_name" : "My test unit",
"_id" : "5979437c6d346eb7d074497a"
}
}]
}
我尝试使用.find()和.aggregate()的各种组合,例如在periol数组上使用$project和$filter,在unit._id上使用$elemmatch之后使用$elemmatch,但是没有用--我得到了诸如“不能在数组上使用$filter”之类的错误。
{
surname: {
type: String
},
firstname: {
type: String
},
units: {
type: [{
unit: {
_id: String,
unit_name: String,
},
period: [Date]
}]
}
}
我觉得我把问题搞得太复杂了。我不确定这是否是最有效的方法,但使用$and操作符似乎提供了我想要的:
db.getCollection("records").find({ "$and": [
{"units.unit._id": "5979437c6d346eb7d074497a"},
{"units.unit_period.0": {"$gte": new Date('2018-12-31T00:00:00.000Z')} },
{"units.unit_period.1": {"$lte": new Date('2020-12-31T00:00:00.000Z')} } ]
})
根据Neil Lunn在评论中的建议,使用$elemmatch而不是$,当然是更好的选择,因为给出的原因。
因此,这是我将采用的解决方案;也就是说,使用#ElemMatch来匹配那些包含嵌入子文档和数组的元素,在这些元素中,值可以通过键上的简单点符号进行访问和匹配。
db.getCollection("records").find({ "units":
{ "$elemMatch":
{ "unit._id": "5979437c6d346eb7d074497a",
"unit_period.0": { "$gte": new Date("2019-12-31") },
"unit_period.1": { "$lte": new Date("2020-12-31") }
}
})
我有一份这样的文件 上面的文档可以这样概括如下,便于理解。 我需要增加nums子文档中数量的值,该值位于产品子文档中,基于其\u id。 这是我迄今为止所尝试的,但它不起作用,因为我不知道如何捕获nums对象内的\u id,以便更新子子文档数组中的特定对象。 我怎样才能做到这一点?
问题内容: 我正在尝试使用Spring查询Mongo存储库并过滤数组子文档。我已经参考过如何使用mongodb过滤子文档中的数组,但是想知道是否有更合适的方法或Java结构化方法来使用Spring。 我当前正在使用速记存储库接口符号,但是我正在获取未过滤数组的完整文档。 PersonRepository.java 人.java 地址.java 样本输入 预期产量 实际产量 问题答案: 好吧,在Sp
我是新来的mongo。我有以下收藏。 文件: 请求: 文档集合中的typeId是文档类型的id,其中请求中的typeId是也可以为空的外部字段。如何获得以下输出。
问题内容: 以下架构仅用于记录特定日期的总观看次数和观看次数。 因此,今天的视图将存储在不同于昨天的另一个子文档中。为了实现这一点,我尝试使用upsert,以便在查看产品的每一天都会创建子文档,并且计数将基于特定的一天进行递增和记录。我尝试使用以下功能,但似乎无法按我预期的方式工作。 我想得到我想要的功能会错过什么?任何帮助将不胜感激。 问题答案: 实际上,您在这里尝试做的事情需要您了解一些可能尚
我有一份这样的文件: 我想通过将其与数量字段(2*800)相乘来更新价格字段,其中的结果将更新/分配给价格。(对于本例,价格更新为1600)。 更新后的文档: 我的选择查询如下: 我怎样才能做到这一点?
我有一系列这样的Mongoid 这些是我收藏的文件的mongo-id。 现在,通过获取这些mongoIDs的数组,即['mongoID1','mongoID2','mongoID3'],我需要通过使用其_id来查询这些id指定的每个文档,并在我的代码逻辑中独立处理其数据。为了简单起见,我刚刚“打印”了输出ieres.json(doc.name)。 如果Mongoose/MongoDB中确实存在这样