可以在mongo db中选择集合的文档,如SQL:
SELECT * FROM collection WHERE _id IN (1,2,3,4);
或如果我有_id array
我必须逐个选择,然后重新组合array/object
个结果?
答案 0 :(得分:115)
简单:)
db.collection.find( { _id : { $in : [1,2,3,4] } } );
取自:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in
答案 1 :(得分:4)
在此代码列表中是用户集合中的ID数组
var list = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"]
.find({ _id: {$in : list}})
答案 2 :(得分:1)
因为mongodb使用bson
并且bson是重要的属性类型。并且因为_id
是ObjectId
,所以您必须这样使用:
db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );
,在mongodb compass
中的用法如下:
{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }
注意:字符串中的objectId的长度为24
。
答案 3 :(得分:0)
等效的SQL将是:
SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");
答案 4 :(得分:0)
如果要按用户以及其他条件(如有条件)进行查找,则可以使用aggregate
和match
const p_id = patient_id;
let fetchingReports = await Reports.aggregate([
...(p_id
? [
{
$match: {
createdBy: mongoose.Types.ObjectId(id),
patient_id: p_id,
},
},
]
: [
{
$match: {
createdBy: mongoose.Types.ObjectId(id),
},
},
答案 5 :(得分:0)
您可以尝试
var ids = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"];
var oids = [];
ids.forEach(function(item){
oids.push(new ObjectId(item));
});
.find({ _id: {$in : oids}})