gpt4 book ai didi

mongodb - 从 $elemMatch 查询返回数组索引

转载 作者:行者123 更新时间:2023-12-02 03:19:36 26 4
gpt4 key购买 nike

假设我有这样一个文档

{
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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com