MongoDB вибрати де в масиві _id?


93

у mongo db можна вибрати документи колекції, як у SQL:

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

або якщо у мене є, _id arrayя повинен вибрати один за одним, а потім перекомпонувати array/objectрезультати?

Відповіді:


167

Легко :)

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

взято з: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in


Чи отримуємо ми все ще переваги індексації? Ідентифікатори в цьому випадку передаються як прості рядки ...
Рафал Пастушак,

2
Ти робиш. Однак складність часу є лінійною (n), а не логарифмічною / постійною. Без індексу це буде n ^ 2.
Петр Бразділь

Чи не O(log(n) * m)там nрозмір колекції та mчи кількість переданих ідентифікаторів?
Guig

8
Вам потрібно використовувати функцію ObjectId, якщо "_id" є об'єктом ID - {_id: {$ in: [ObjectId ("5a633609670aeb6f93b88b23")]}}
Pax Beach,

7

list - це масив ідентифікаторів

У цьому списку кодів є масив ідентифікаторів в колекції користувачів

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

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

4
Код не працює. Здається, потрібно встановити ідентифікатори як ObjectId ("5883d387971bb840b7399130")
Pax Beach,

2

Оскільки mongodb використовує bsonі для bson, це важливі типи атрибутів. і тому , що _idце ObjectIdви повинні використовувати так:

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

і mongodb compassвикористовується у такий спосіб:

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

Примітка: objectId у рядку має 24довжину.


1

якщо ви хочете , щоб знайти користувачем , а також інше поле , як умовно, ви можете легко зробити це , як під з поширенням і потрійний оператор з використанням 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),
              },
            },
        

-3

Це не пов'язано з запитом mongo. Я був знайомий з SQL і використовував IDE Studio3T для запиту бази даних mongo за допомогою SQL. Якщо ви подібні до мене, я хочу зазначити, що значення ідентифікатора потрібно вводити. Тож запит буде виглядати так:

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

2
Це взагалі не стосується питання.
локтріс

Не відповідає, погодився. Це може допомогти в деяких IDE, таких як Studio3T, які дозволяють взаємодіяти з mongoDB за допомогою SQL. Там відповідь має застосування. Крім того, слід підкреслити, що навіть у цьому випадку _id повинен бути введений у тип.
sourabhxiii

1
це про mongodb
Рохіт,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.