在mongodb中使用objectId作为数组

时间:2012-12-28 15:47:09

标签: javascript mongodb

在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,但我希望找到一种更简单的方法来执行此操作。

2 个答案:

答案 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)操作,因为它必须搜索每个数组元素以找到匹配。您可能需要创建索引以提高性能。