27

マングースを使用してデータを挿入する必要がありますが、コレクションの名前は挿入時にユーザーによって提供されるため、最初にコレクションが存在するかどうかを確認する必要があります。

コレクションが存在するかどうかを確認する方法を知る方法は、system.namespacesコレクションをクエリすることです。私はそれを行うための3つの可能なアプローチを見ることができます。

  1. マングースを使用してクエリを実行する方法を見つけますsystem.namespaces(おそらく、データベース内のスキーマと一致するスキーマを定義します)。
  2. 基になるnode-mongodb-nativeオブジェクトをmongooseから取得し、クエリを手動で実行します。いずれにせよ、これは私がその方法を学びたいと思っていることです。
  3. node-mongodb-native(または他のドライバー)の別のインスタンスを使用してクエリを実行する

番号3は最もエレガントではなく、避けようとしているものです。マングースがすでに接続を作成しているときに、ドライバーの別のインスタンスをロードしたり、新しい接続を作成したりしたくありません。

1これを書いた後、数字を試してみます。チェックsystem.namespacesしたところ、スキーマは非常に単純に見えます

まだまだ意見を聞きたいです。

ありがとう!

4

4 に答える 4

40

オプション2はおそらく最もクリーンです。を使用して開かれたという名前のMongooseConnectionオブジェクトがあるとすると、を介してネイティブのmongoオブジェクトにアクセスできます。そこから、あなたが探しているものを提供するはずの電話をかけることができます:connmongoose.createConnectionDbconn.dbcollectionNames

conn.db.collectionNames(function (err, names) {
    // names contains an array of objects that contain the collection names
});

コレクション名をパラメーターとして渡してcollectionNames、結果を探しているものだけにフィルターすることもできます。

マングース4.xアップデート

Mongoose 4.xが使用するMongoDBネイティブドライバーの2.xバージョンでは、フィルターを受け入れてカーソルを返すものcollectionNamesに置き換えられているlistCollectionsため、次のように実行します。

mongoose.connection.db.listCollections({name: 'mycollectionname'})
    .next(function(err, collinfo) {
        if (collinfo) {
            // The collection exists
        }
    });
于 2012-11-18T22:21:12.317 に答える
4

これは私のために働きます(マングースバージョン5.1.1):

const mongoose = require('mongoose');
const mongoURI = 'mongodb://localhost:27017/mydb'
// notice the mongoose.createConnection instead of mongoose.connect
const conn = mongoose.createConnection(mongoURI);
conn.on('open', function () {
    conn.db.listCollections().toArray(function (err, collectionNames) {
      if (err) {
        console.log(err);
        return;
      }
        console.log(collectionNames);
        conn.close();
    });
});
于 2018-06-22T01:40:22.837 に答える
0

これが私のために働いた別のオプションです(少し使用しますがexpress、それがなくてもうまくいくと思います)。モデルをインポートしたとします。Blogそして、モデルの名前だとし ましょう。

const app = express();
const Blog = require('./models/blog');

app.post('/example', (req, res) => {
  Blog.findOne({name: 'collectionname'})
  .then(result => {
    if(result) {
      //If it exists
    }
  })
})

'''は
またはのresultいずれnullobjectです。

于 2020-12-16T17:48:59.450 に答える
-7

コレクションのリストでコレクションを検索する

public function CollectionExists($collectionName)
    {
        $mongo = new Mongo();
        $collectionArr = $mongo->selectDB('yourrec')->listCollections();
        if (in_array($collectionName, $collectionArr)) {
            return true;
        }
        return false;
    }
于 2013-02-25T09:46:03.743 に答える