Mongo không thể tìm thấy bộ sưu tập của tôi


10

Máy chủ mongodb của tôi có một cơ sở dữ liệu có tên là làngContents

Nó có một bộ sưu tập tên là kinh doanh bàn

Nếu tôi chạy mongo tôi đã thấy

MongoDB shell version: 2.0.7
connecting to: test
>

Tôi tự hỏi "kiểm tra" là gì. Không có cơ sở dữ liệu tên thử nghiệm ở đó.

Tôi đã cố gắng thực hiện

> villageContents.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"})
Wed Aug 15 09:28:28 ReferenceError:is not defined (shell):1
>

Tôi đã cố gắng thực hiện

> test.villageContents.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"})
Wed Aug 15 09:29:13 ReferenceError: test is not defined (shell):1
>

Tôi đã làm gì sai?

Sau đó tôi đã làm

db.villageContents.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"})

Không có gì hiện lên. Các chỉ mục thậm chí không được thêm vào.

Vì vậy những gì là sai?

Câu trả lời:


8

Tôi tự hỏi "kiểm tra" là gì. Không có cơ sở dữ liệu tên thử nghiệm ở đó.

Đây chỉ là cơ sở dữ liệu mặc định mà trình vỏ mongo sử dụng khi kết nối, trừ khi bạn chèn một cái gì đó, nó trống. Bạn có thể làm điều này với bất kỳ cơ sở dữ liệu nào trong thực tế, kiểm tra chỉ là mặc định.

Lệnh đầu tiên sẽ không hoạt động vì bạn không đặt tiền tố với db, vì vậy nó cố gắng tìm "isikota" dưới dạng một biến (javascript) và không tìm thấy nó. Tương tự, lần thử tiếp theo của bạn cũng thực hiện tương tự với biến "kiểm tra" không tồn tại.

Cuối cùng, lệnh này là dạng đúng (có tiền tố là db):

db.isikota.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"})

Nhưng, bạn đã không thay đổi cơ sở dữ liệu (với use <database name>) hoặc ít nhất là bạn đã không đề cập đến việc cố gắng ít nhất. Điều này sẽ làm là tạo chỉ mục 2d (Geoindex) trên trường "LatitudeLongitude" trên bộ sưu tập có tên "isikota.tablebusiness" trong cơ sở dữ liệu thử nghiệm (db luôn đề cập đến cơ sở dữ liệu bạn hiện đang sử dụng). Ngay cả khi bộ sưu tập này không tồn tại, chỉ mục sẽ được tạo (đây chỉ là một phần chèn vào không gian tên system.indexes) và do đó lệnh thành công. Bạn sẽ không thấy gì khác, vì tôi tin rằng bạn vẫn đang hoạt động trên cơ sở dữ liệu thử nghiệm.

Giả sử dữ liệu của bạn thực sự nằm trong cơ sở dữ liệu có tên là "isikota" và "kinh doanh bảng" là bộ sưu tập của bạn, điều bạn thực sự muốn làm là:

use isikota;
db.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"});

Điều đó sẽ tạo chỉ mục trên trường "LatitudeLongitude" trong bộ sưu tập có tên "kinh doanh bảng" trong cơ sở dữ liệu có tên "isikota".


Và thực sự có một cơ sở dữ liệu gọi là thử nghiệm. Tôi đã không nhìn thấy nó.
dùng4951
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.