web-dev-qa-db-ja.com

_idフィールドなしでドキュメントを挿入するMongodb

私はmongodbの初心者です。

  1. _idフィールドを自動的に生成せずにドキュメントを挿入する必要があります。

  2. フィールドTenant_idを一意に設定するか、「_ id」フィールドをTenant_idに変更する必要があります。

どうやるか?

このようなもの

     Tenant
        {Tenant_id: 123, Tenant_info: ...}
12
Ramya

デフォルトでは、すべての通常のコレクションは、_idフィールドがない場合、自動的に挿入します。

ただし、コレクションを作成するときに、autoIndexIdパラメーターを明示的にfalseに設定することで、この動作を変更できます。

> db.createCollection("noautoid", { autoIndexId: false })
{ "ok" : 1 }

次に、_idフィールドなしでドキュメントを挿入できます。ただし、javascriptドライバー(およびmongoコンソール)などの一部のドライバーは、独自に_idフィールドを追加します。 mongoコンソールでは、次のことができます。

> db.noautoid._mongo.insert(db.noautoid._fullName, {name: "Jack"})
> db.noautoid.find()
{ "name" : "Jack" }

AutoIndexIdフィールドの詳細については、 MongoDBドキュメント を参照してください。このページは上限付きコレクションに関するものですが、autoIndexIdフィールドは通常のコレクションと上限付きコレクションの両方に共通です。

23

_idフィールドは、上限付きコレクションを使用していない限り、mongoドキュメントのデフォルトキーです。

これは、ドキュメント構造から除外できない不変のフィールドです。

代わりにtennant_id_idとして使用することをお勧めします。

3
Sammaye

Mongodbは、ドキュメントを挿入するときに「_id」フィールドに値を指定しない場合にのみ、「_ id」フィールドを自動的に生成します。したがって、ドキュメントを挿入するときに、手動で_idを設定できます。

db.tenants.insert( {"_id" : 123, "Tenant_info" : ... } )
3
Louisa

すべてのMongoDBドキュメントには一意のフィールド「_id」が必要です。指定しない場合は、自動的に生成されます。

このフィールドの名前を変更することはできません。

2つの選択肢は次のとおりです。

1)生成された_idフィールドを無視し、独自のtenant_idフィールドを使用します(そのフィールドに一意のインデックスを追加する必要があります)。または2)_idフィールドにtenant_id値を格納します(すでに一意のインデックスがあるという事実を利用します)その上)。

2
Asya Kamsky

Mongodbコレクションの_idフィールドを削除する方法はありません。 @stepheneが言ったように、私は同じことを試みましたが、iamはこのようなエラーを取得します

> db.noautoid._mongo.insert(db.noautoid._fullName, {name: "Jack"});
 2015-06-18T11:22:29.149+0530 E QUERY    Error: insert needs 3 args
 at (Shell):1:20
1
Jagadeesh