2

我有一个看起来像这样的集合用户:

{
_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 ......但我只想要一个。

希望我很清楚。谢谢

4

3 回答 3

2

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

当您运行以下查询时

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

...这意味着_id等于idia等于对象{key:0}。这可能不是你想要的。

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

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

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

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

于 2012-05-26T05:52:41.423 回答
0

感谢您的帮助,这样的工作人员:

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

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

于 2012-05-30T23:51:26.197 回答
0

您的收藏似乎具有以下架构:

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

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

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

您可以在此处阅读有关 $slice 运算符的更多信息。Mongoose 在查询页面上记录了它对 $slice 运算符的支持。希望这可以帮助!

于 2012-05-26T05:54:59.420 回答