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")

ID内のID0の場所を教えてくれるids.indexOf(id0)のようなことをする方法を探しています。すべてを文字列に変換してから indexOf を使用できますが、これを行うためのより簡単な方法を見つけたいと思っていました。

4

2 に答える 2

1

これにはワンライナーはないと思います。forループを使用する必要があります。

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

リストが頻繁に変更されない(または追加されるだけの)場合は、ドキュメントにインデックスを追加することを検討してください{ i: 0, r: ObjectId('....') }。ここで、iフィールドはインデックスを表します。

次にdb.foo1.find( { 'list.r' : ObjectId('...') })。結果には、結果のドキュメントのフィールドを調べることでインデックスが付けiられます。

ただし、リストが長い場合、一致するものを見つけるためにすべての配列要素を検索する必要があるため、これは常にO(N)操作になります。パフォーマンスを向上させるために、インデックスを作成する必要がある場合があります。

于 2012-12-28T16:50:43.880 に答える