Я не могу точно сказать, как вы дошли до этого момента, но произошло то, что вы буквально создали коллекцию под названием [object Object]
. Это немного надуманный, но вот как вы можете воссоздать ситуацию:
// create an object, let's call it y
> var y = {a : 1, b : 2, c : [1, 2, 3]}
// now create a collection using the variable as the name by inserting
> db[y].insert({s : 1})
// we now have [object Object] as a collection
> show collections
ObjectId("552b9e7d8c5b893bc6bfae45")
[object Object]
system.indexes
// This makes it a little more obvious what we have done
> db.getCollection("system.namespaces").find();
{ "name" : "x.ObjectId(\"552b9e7d8c5b893bc6bfae45\")" }
{ "name" : "x.system.indexes" }
{ "name" : "x.ObjectId(\"552b9e7d8c5b893bc6bfae45\").$_id_" }
{ "name" : "x.[object Object]" }
{ "name" : "x.[object Object].$_id_" }
// We can even query it
> db[y].find()
{ "_id" : ObjectId("552b9f728c5b893bc6bfae47"), "s" : 1 }
// To make it even more obvious what is going on, let's use a different object
> var z = {a : 1, b : 2, c : [1, 2, 3, 4]}
> db[z].insert({t : 1})
// BUT, no new collection this time, we still just have one [object Object]
> db.getCollection("system.namespaces").find();
{ "name" : "x.ObjectId(\"552b9e7d8c5b893bc6bfae45\")" }
{ "name" : "x.system.indexes" }
{ "name" : "x.ObjectId(\"552b9e7d8c5b893bc6bfae45\").$_id_" }
{ "name" : "x.[object Object]" }
{ "name" : "x.[object Object].$_id_" }
// let's confirm by querying
db[z].find()
{ "_id" : ObjectId("552b9f728c5b893bc6bfae47"), "s" : 1 }
{ "_id" : ObjectId("552ba1888c5b893bc6bfae48"), "t" : 1 }
Итак, MongoDB это позволяет создавать коллекции с объектом, но все объекты оценки одной и той же [object Object]
строки независимо от объекта вы передаете Это означает, что вы не можете быть уверены в том, как вам удалось создать эту коллекцию, но с плюсовой стороны это также означает, что все, что вам нужно сделать, это создать любой объект, и вы можете использовать его для его удаления. Для моего случая, я просто повторно использовать переменную z
выше, но вы можете существенно использовать любой объект, чтобы сделать удаление:
> db[z].drop()
true
> db.getCollection("system.namespaces").find();
{ "name" : "x.ObjectId(\"552b9e7d8c5b893bc6bfae45\")" }
{ "name" : "x.system.indexes" }
{ "name" : "x.ObjectId(\"552b9e7d8c5b893bc6bfae45\").$_id_" }
И там у вас есть, это пошло. Что касается того, является ли это ошибкой или нет, вы можете сделать аргумент, что [object Object]
является допустимым именем коллекции - я бы не рекомендовал его использовать, но это не является незаконным. Возможно, это не ошибка, а улучшение, которое можно было бы предложить, тем не менее.
Как и в сторону, я тестировал вам даже не нужно на самом деле использовать объект здесь, вы можете сделать это со строкой, что-то вроде этого:
var j = '[object Object]'
db[j].drop()
возможно дубликат [Невозможно удалить коллекцию из MongoDB] (http://stackoverflow.com/questions/13661801/can-not-delete-collection-from-mongodb). Насколько он может казаться, я действительно не знаю. –
... тот факт, что такая коллекция существует, звучит как ошибка. Является ли вывод 'db.getCollectionNames()' другим? – mnemosyn
Под этой БД показана эта коллекция? –