Как перечислить все индексы Mon go Collection с нативным MongoDB Node? - PullRequest
1 голос
/ 18 марта 2020

Ну, я хочу знать, как я могу получить все индексы из определенной c коллекции mongodb. Я пробовал с listIndexes, indexes и indexInformation, но эти методы дают только пустые значения (массив и объект), но если я выполню db.getCollection('truck').getIndexes() на терминале mon go, это даст мне все индексы.

Я думаю, что это может быть ошибка, но я не нахожу никакой информации об этом, поэтому позвольте мне показать мои примеры и скриншот из "Robo 3T".

await connection.collection('truck').indexes() // returns []
await connection.collection('truck').listIndexes().toArray() // returns []
await connection.collection('truck').indexInformation() // returns {}

enter image description here

Итак ... Что здесь произошло? почему эти методы не работают?

Спасибо: D

PS: я использую mongodb версия 3.5.5: https://github.com/mongodb/node-mongodb-native

Ответы [ 3 ]

3 голосов
/ 18 марта 2020

Похоже, в коде await connection.collection('truck').indexes() вам необходимо указать и базу данных. Непонятно, что такое connection.

Следующий скрипт будет печатать индексы в указанной базе данных и коллекции.

const MongoClient = require('mongodb').MongoClient;

( async function() {
     const client = new MongoClient('mongodb://localhost:27017', { useNewUrlParser: true, useUnifiedTopology: true } );
     try {
        await client.connect();
        const coll = client.db('test').collection('books');
        const indxs = await coll.indexes();
        console.log(indxs);     // prints all the indexes
     } catch (err) {
         console.log(err.stack);
     }
     client.close();
)();
0 голосов
/ 18 марта 2020

listIndexes - это команда базы данных, вы должны вызывать ее следующим образом:

db.runCommand( {listIndexes: "truck"} )

или использовать сокращение

db.truck.getIndexes()
db.collection('truck').getIndexes()

Метод indexInformation не существует в MongoDB (по крайней мере, я не нашел его). collection.indexes() Я тоже не нашел.

0 голосов
/ 18 марта 2020

Что ж, после того, как попробуем некоторые решения, такие как перевод языка с javascript на Python и использование Pymongo ... и получение того же результата ... Я решил использовать командный интерфейс, но используя родной API в драйвере .. Да, я использую command, позвольте мне показать, как:

import {MongoClient} from 'mongodb'
const client = await MongoClient.connect("...")
const db = client.db("MyOwnDatabase")

// the next line retrieve empty array
db.collection('truck').indexes();

// the next line retrieve all indexes ?
db.command({listIndexes: "truck"}).cursor.firstBatch;

В Python слишком похоже:

import pymongo
client = pymongo.MongoClient("...")
db = client.MyOwnDatabase

# retrieve empty object
db.truck.index_information()

# retrieve all indexes ?
db.command("listIndexes", "truck") 

Я думаю, что эта проблема о драйвере .. оба являются официальным драйвером, но ни один не работает хорошо: D

PS: я знаю, что этот вопрос о javascript, но я нашел ту же проблему в Python, и это решение для обоих .

...