【问题标题】:How to get a child of a mongo collections by the key?如何通过密钥获取 mongo 集合的孩子?
【发布时间】:2012-06-01 08:40:25
【问题描述】:

我有一个这样的集合用户:

{
_id: myid,
name : 'blabla',
ia : {
       [0]-> 'an id',
       [1]-> 'a second id'
      }
}

我只想拥有我的第一个 ia id,所以我尝试了类似的方法:

User.find({ _id: id, ia :{ key : indexia} }, ['ia']).populate('ia').run(rendu);

其中 id= myid,indexia=0。

如果我不放那个部分:“ia :{ key : indexia}”我得到了我所有的 ia...但我只想要一个。

希望我很清楚。 谢谢

【问题讨论】:

  • 我不确定我是否正确理解了您的请求。你到底得到了什么,你想得到什么?您是否有实际/预期的 JSON 要发布?
  • 我的收藏:{ "_id": { "$oid" : "4fac50bda7087c0c14000001" }, "ia": [ "4fbec72f7f0257a815000004", "4fbed51b53795ffc06000001", "4fbee302403949fc06000001", "4fbee302403949fc]7f a@a.fr”,‘名称’:‘一’,‘密码’:‘5267768822ee624d48fce15ec5ca79cbd602cb7f4c2157a516556991f22ef8c7b5ef7b18d1ff41c59370efb0858651d44a936c11b7b144c48fe04df3c6a3e8da’}的信息Ive得到:用户_id(4fac50bda7087c0c14000001)和IA的密钥参考:(第一,第二或第三)。我也想检索一个 ia 的 id,例如:4fbed51b53795ffc06000001

标签: node.js mongodb key mongoose mongodb-query


【解决方案1】:

MongoDB find() 命令旨在匹配整个文档。

当您运行以下查询时

{ _id: id, ia :{ key : indexia} }

...这意味着“其中_id 等于id 并且ia 等于对象{key:0}。这可能不是你想要的。

如果我不放那部分:“ia :{ key : indexia}”,我会得到我所有的 ia...但我只想要一个。

听起来您想返回给定文档的一部分。这方面的文档是here。在您的情况下,它看起来像这样:

find({ _id: id}, { 'ia.0' : 1 })

查找的第一部分将找到该文档。第二部分将返回特定的字段。

【讨论】:

    【解决方案2】:

    感谢您的帮助 它是这样工作的:

    User.find({ _id: id }).only('ia').slice('ia', indexia, 1).populate('ia').run(rendu);
    

    唯一的('ia')不起作用,但没什么大不了的。

    【讨论】:

      【解决方案3】:

      您的收藏似乎具有架构:

      { "_id" : "id",
        "ia"  : ["id1","id2","id3"],
         etc.
      }
      

      在这种情况下,获取“ia”字段的第一个“id”的查询将是:

      find({}, { "ia" : {$slice:1  } })
      

      您可以阅读有关 $slice 运算符 here 的更多信息。 Mongoose 在query page 上记录了它对 $slice 运算符的支持。 希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2019-11-19
        • 1970-01-01
        • 1970-01-01
        • 2020-02-12
        • 1970-01-01
        • 2023-03-18
        • 2017-05-31
        • 2015-06-24
        • 2017-06-24
        相关资源
        最近更新 更多