【问题标题】:Meteor query based on the value of elements in an array inside an object基于对象内部数组中元素值的流星查询
【发布时间】:2018-03-28 18:05:01
【问题描述】:

我是流星和 mongoDB 的新手,一段时间以来一直在寻找这个问题的答案,但没有任何运气。 我在 MongoDB 中有多个文档,类似于以下文档:

{
    "_id" : ObjectId("5abac4ea0c31d26804421371"),
    "Points" : [
        {
            "Value" : 6.869752766626993,
            "Time" : 1522284528946
        },
        {
            "Value" : 3.9014587731230477,
            "Time" : 1522284543946
        },
        {
            "Value" : 1.2336926618519772,
            "Time" : 1522284558946
        },
        {
            "Value" : 6.504837583667155,
            "Time" : 1522284573946
        },
        {
            "Value" : 9.824138227740864,
            "Time" : 1522284588946
        },
        {
            "Value" : 9.707480757899235,
            "Time" : 1522284603946
        },
        {
            "Value" : 4.6122167850338105,
            "Time" : 1522284618946
        }
    ]
}

如何在流星中实现一个查询,该查询返回一个数组,该数组包含所有“时间”字段大于某个值的文档中的所有点?

【问题讨论】:

标签: meteor


【解决方案1】:

正如 Jankapunkt 在他的评论中指出的那样,如果您创建一个新集合 Points,其中每个文档仅包含 Value时间属性。给定的示例将变成七个单独的文档,而不是单个数组。

尽管如此,我们还是想根据一些内部值来查询文档,例如数组中对象的属性。

取自mongodb documentation on querying embedded documents,我们可以为此使用点符号。

如果您不知道嵌套在数组中的文档的索引位置,请将数组字段的名称用点 (.) 与嵌套文档中的字段名称连接起来。

比如你的问题(假设 Points 是你收藏的名字):

db.points.find( { 'Points.Time': { $gte: 123412341234 } } )

在 Meteor 中看起来几乎相同:

Points.find({ 'Points.Time': { $gte: 123412341234 } })

【讨论】:

  • 非常感谢。这些集合是由我无法控制的后台 C 代码创建的。点数组和文档中的一些其他字段之间存在一些关联,我们无法打破这些关联以将点数组引入点集合。您的解决方案解决了我的问题。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2016-12-26
  • 2017-03-21
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多