MongoDB在_id数组中选择哪里?


90

可以在mongo db中像在SQL中那样选择集合的文档:

SELECT * FROM collection WHERE _id IN (1,2,3,4);

还是如果我有一个_id array我必须一个一个地选择,然后重新组合array/object结果?

Answers:


165

简单 :)

db.collection.find( { _id : { $in : [1,2,3,4] } } );

摘自:http : //www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in


我们仍然可以获得索引的好处吗?在这种情况下,ID会以纯字符串形式传递...
Rafal Pastuszak

2
你做。但是,时间复杂度是线性的(n),而不是对数/常数。没有索引,它将是n ^ 2。
Petr Brazdil 2014年

集合的大小和传递的id数不是O(log(n) * m)哪里?nm
Guig

8
如果“ _id”是ID对象,则必须使用ObjectId函数-{_id:{$ in:[ObjectId(“ 5a633609670aeb6f93b88b23”)]}}
Pax Beach,

5

列表是一个ID数组

此代码列表中是用户集合中的ID数组

var list = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"]

    .find({ _id: {$in : list}})

4
该代码不起作用。似乎必须将ID设置为ObjectId(“ 5883d387971bb840b7399130”)
Pax Beach,

0

因为mongodbbson对bson使用和是重要的属性类型。因为_idObjectId你必须使用这样的:

db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );

mongodb compass像这样使用:

{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }

注意:字符串中的objectId具有24长度。


-4

这与mongo查询无关。我熟悉SQL,并使用Studio3T IDE使用SQL查询mongo数据库。如果您像我一样,我想指出一下,需要对id值进行类型转换。因此查询将如下所示:

SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");

2
这根本没有解决这个问题。
loctrice

不回答,表示同意。它可能对某些Studio3T等IDE有所帮助,该IDE使您可以使用SQL与mongoDB进行交互。答案有应用。另外,要强调的是,即使在这种情况下,_id也必须进行类型转换。
sourabhxiii

1
关于mongodb
Rohit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.