MongoDB选择_id数组的位置?

时间:2011-10-10 13:19:05

标签: javascript arrays node.js mongodb express

可以在mongo db中选择集合的文档,如SQL:

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

或如果我有_id array我必须逐个选择,然后重新组合array/object个结果?

6 个答案:

答案 0 :(得分:115)

简单:)

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

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

答案 1 :(得分:4)

list is a array of ids

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

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

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

答案 2 :(得分:1)

因为mongodb使用bson并且bson是重要的属性类型。并且因为_idObjectId,所以您必须这样使用:

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)

如果要按用户以及其他条件(如有条件)进行查找,则可以使用aggregatematch

像下面那样使用扩展和三元运算符轻松地进行查找。
 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}})