2012-09-11 20 views
8

Tôi là người mới đến mongodb.Mongodb chèn tài liệu không có trường _id

  1. Tôi cần chèn tài liệu không có trường _id tự động tạo.

  2. Tôi cần đặt trường Tenant_id là trường duy nhất hoặc cần phải thay đổi trường "_id" thành Tenant_id.

cách thực hiện?

cái gì đó như

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

Trả lời

22

Theo mặc định, tất cả các bộ sưu tập thường xuyên tự động chèn một trường _id nếu nó là vắng mặt.

Tuy nhiên, hành vi này có thể thay đổi khi bạn tạo bộ sưu tập, bằng cách đặt rõ ràng tham số autoIndexId thành false.

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

Sau đó, bạn có thể chèn tài liệu không có trường _id. Nhưng một số trình điều khiển, giống như một trình điều khiển javascript (và do đó, giao diện điều khiển mongo), hãy thêm trường _id của chính chúng. Trong Mongo console, bạn có thể làm điều này:

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

Thông tin thêm về lĩnh vực autoIndexId có thể được tìm thấy trong MongoDB documentation. Trang này giới thiệu về các Bộ sưu tập được giới hạn nhưng trường autoIndexId là phổ biến cho cả các bộ sưu tập thông thường và được giới hạn.

+0

không hoạt động ... –

+2

Nó không còn được cho phép - _id trường là cần thiết cho nhân rộng và do đó nên luôn luôn tồn tại. –

3

Trường _id này là chìa khóa mặc định cho một tài liệu Mongo trừ khi bạn đang sử dụng bộ sưu tập mũ.

Đây là trường không thể bỏ qua mà không thể bỏ qua cấu trúc tài liệu.

Tôi khuyên bạn nên sử dụng tennant_id làm _id thay thế.

2

Mỗi tài liệu MongoDB phải có một trường duy nhất "_id" và nếu bạn không cung cấp thì nó sẽ tự động được tạo cho bạn.

Không thể đổi tên trường này.

hai sự lựa chọn của bạn là:

1) bỏ qua các lĩnh vực _id tạo ra và sử dụng trường tenant_id của riêng bạn (bạn sẽ cần phải thêm một chỉ số duy nhất về lĩnh vực đó) hoặc giá trị tenant_id 2) lưu trữ trong _id lĩnh vực (và tận dụng thực tế là nó đã có một chỉ mục duy nhất trên đó).

3

Mongodb sẽ tự động tạo trường '_id' chỉ khi bạn không chỉ định giá trị cho trường '_id' khi bạn chèn tài liệu. Vì vậy, bạn có thể chỉ cần tự đặt _id khi bạn chèn các tài liệu:

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

Không có cách nào để xóa trường _id trong bất kỳ bộ sưu tập mongodb nào. Như, @stephene đã nói, tôi đã thử như cũ, nhưng iam nhận được lỗi như thế này

> 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