假设我有这样一个文档
{
title : 'myTitle',
favorites : [{name : 'text', number : 6}, {name : 'other', number : 4}]
}
我想从收藏夹数组中检索嵌入文档的位置返回数组索引(如果有的话)。
假设我有以下查询
{title : 'myTitle'}
和投影
{favorites : {$elemMatch : {name : 'text', number : 6} }}
如果投影返回文档并且它包含一个带有子文档的收藏夹数组,有没有办法知道在哪个索引处找到了子文档?在这种情况下是索引 0。
我想要索引的原因是因为一旦我检索到文档,我就会继续更新它,如果我有一个特定的索引要更新而不是使用 $elemMatch
,它会提高性能。再次这将导致 mongo 遍历所有数组条目,直到找到匹配的文档。
最佳答案
不幸的是,无法使用 $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
中。如果您想要整个文档以及其他数组元素,则必须在 $unwind
而不是 $match
之后添加 $group
。
对于以前的版本,在客户端迭代数组,并获取子文档的索引是可行的方法。
关于mongodb - 从 $elemMatch 查询返回数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34347858/