0

在 javascript 中,我们可以使用 indexOf 在数组中找到特定字符串的位置

> ["aa","bb"].indexOf("bb")
1 

例如,我想对 mongodb 中的 objectIds 做同样的事情

> ids= db.foo1.distinct('_id');
[
        ObjectId("50d38d775f2b6c6e3393d6b0"),
        ObjectId("50d38d835f2b6c6e3393d6b1")
]
> id0=db.foo1.findOne()._id
ObjectId("50d38d775f2b6c6e3393d6b0")

我正在寻找一种方法来做类似ids.indexOf(id0)的事情,这会给我 id0 在 ids 中的位置。我可以将所有内容都转换为字符串,然后使用 indexOf 但我希望找到一种更简单的方法来做到这一点。

4

2 回答 2

1

如果列表不经常更改(或仅添加到),请考虑仅添加带有索引的文档:{ i: 0, r: ObjectId('....') },其中i字段表示索引。

然后db.foo1.find( { 'list.r' : ObjectId('...') })。通过查看i结果文档中的字段,结果将具有索引。

但是,如果列表很长,这将始终是一个 O(N) 操作,因为它必须搜索每个数组元素才能找到匹配项。您可能需要创建索引来提高性能。

于 2012-12-28T16:50:43.880 回答
1

我不认为有一个单行,你需要使用一个 for 循环:

for (var i=0; i<ids.length; i++) { 
    if (ids[i].equals(id0)) { ixOfId0 = i; break; } 
}
于 2012-12-28T16:05:46.473 回答