在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)的操作,它会在id中为我提供id0的位置。我可以将所有内容转换为字符串,然后使用indexOf,但我希望找到一种更简单的方法来执行此操作。
答案 0 :(得分:1)
我不认为这有一个单行,你需要使用for循环:
for (var i=0; i<ids.length; i++) {
if (ids[i].equals(id0)) { ixOfId0 = i; break; }
}
答案 1 :(得分:1)
如果列表不经常更改(或仅添加到列表中),请考虑添加索引为{ i: 0, r: ObjectId('....') }
的文档,其中i
字段表示索引。
然后db.foo1.find( { 'list.r' : ObjectId('...') })
。通过查看结果文档中的字段i
,结果将具有索引。
但是,如果列表很长,这总是一个O(N)操作,因为它必须搜索每个数组元素以找到匹配。您可能需要创建索引以提高性能。