Javascript 在mongodb中将objectId用作数组
在javascript中,我们可以使用indexOf of of of在数组中找到特定字符串的位置Javascript 在mongodb中将objectId用作数组,javascript,mongodb,Javascript,Mongodb,在javascript中,我们可以使用indexOf of of of在数组中找到特定字符串的位置 > ["aa","bb"].indexOf("bb") 1 例如,我想对mongodb中的ObjectID执行同样的操作 > ids= db.foo1.distinct('_id'); [ ObjectId("50d38d775f2b6c6e3393d6b0"), ObjectId("50d38d835f2b6c6e3393d6b1") ] >
> ["aa","bb"].indexOf("bb")
1
例如,我想对mongodb中的ObjectID执行同样的操作
> ids= db.foo1.distinct('_id');
[
ObjectId("50d38d775f2b6c6e3393d6b0"),
ObjectId("50d38d835f2b6c6e3393d6b1")
]
> id0=db.foo1.findOne()._id
ObjectId("50d38d775f2b6c6e3393d6b0")
我正在寻找一种类似于ids.indexOf(id0)的方法,它将给出id0在ids中的位置。我可以将所有内容转换为字符串,然后使用indexOf,但我希望找到一种更简单的方法来实现这一点。我不认为这是一个单行程序,您需要使用for循环:
for (var i=0; i<ids.length; i++) {
if (ids[i].equals(id0)) { ixOfId0 = i; break; }
}
<代码> >(var i=0;i 如果列表没有频繁改变(或仅添加到),考虑只添加带有索引的文档:<代码> {i:0,R:ObjectId(‘……)}<代码>,其中<代码> i <代码>字段表示索引。 然后
db.foo1.find({'list.r':ObjectId('…')})
。通过查看结果文档中的字段i
,结果将具有索引
但是,如果列表很长,这将始终是一个O(N)操作,因为它必须搜索每个数组元素以找到匹配项。您可能需要创建一个索引以提高性能。我做了类似的事情。我希望有一个更聪明的方法来做到这一点。非常感谢。数据集太大了,我无法更改,但感谢您的评论您如何使用“索引”value?似乎MongoDB的数据结构可能不高效?此外,除非您将它们显式地放入数组中,否则无法保证顺序。使用Distinct不能保证特定的顺序(并且将
Distinct
与\u id
一起使用没有意义,因为\u id
必须是每个MongoDB唯一/不同的)。