说我有这样的文件
{
title : 'myTitle',
favorites : [{name : 'text', number : 6}, {name : 'other', number : 4}]
}
我想从收藏夹数组中检索嵌入文档的位置返回数组索引(如果有)。
说我有以下查询
{title : 'myTitle'}
和投影
{favorites : {$elemMatch : {name : 'text', number : 6} }}
如果投影返回文档并且它包含带子文档的收藏夹数组,是否有办法知道找到子文档的索引?在这种情况下,索引为0。
我希望索引的原因是因为只要我检索文档,我就会继续更新它,如果我有一个特定的索引要更新而不是再次使用$elemMatch
,它会提高性能会导致mongo遍历所有数组条目,直到找到匹配的文档。
答案 0 :(得分:0)
不幸的是,使用$elemMatch
运算符是不可能的。如果您使用的是mongodb 3.2
,则可以使用$unwind
运算符和aggregate
代替find()
db.collection.aggregate([
{$match:{"favorites.name":"text","favorites.number":6}},
{$unwind:{"path":"$favorites","includeArrayIndex":"index"}},
{$match:{"favorites.name":"text","favorites.number":6}}
])
将返回文档,其数组索引位于字段中 - index
。如果您想要整个文档以及其他数组元素,则必须$group
后$unwind
而不是$match
。
对于以前的版本,在客户端迭代数组,获取子文档的索引将是最佳选择。