2010-09-15 14 views
11

In der MongoDB Schale, wenn ich folgende tun, dann wird ein Index erstellt, und auch verhindern, dass doppelte Datensätze aus eingefügt werden:Warum kann MongoDB einen eindeutigen Index erstellen, aber Mongoid nicht?

db.analytics.ensureIndex({page: 1, some_id: 1, ga_date: -1}, {unique: true}); 

Aber ich dachte Mongoid kann das Gleiche tun: http://mongoid.org/docs/indexing/

so habe ich:

class PageAnalytic < Analytic 
    include Mongoid::Document 
    field :page, :type => String 
    field :some_id, :type => Integer 
    field :ga_date, :type => Time 
    field :pageviews, :type => Integer 
    field :timeOnPage, :type => Integer 
    index(
    [ 
     [ :page, Mongo::ASCENDING ], 
     [ :some_id, Mongo::ASCENDING ], 
     [ :ga_date, Mongo::DESCENDING ] 
    ], 
    :unique => true 
) 
end 

und machen einen

rake db:create_indexes 

aber trotzdem können doppelte Datensätze eingefügt werden?

Update: ist es ziemlich seltsam, aber nachdem ich den Index in der MongoDB Shell und Fallenlassen der Sammlung hinzugefügt und neu erstellt dann den Index entweder in der MongoDB Shell oder Mongoid, jetzt kann ich die Sammlung in MongoDB Schale fallen , und dann rake erstellen Sie den Index, und verwenden Sie Mongoid, um die gleichen Dokumente zweimal hinzuzufügen, und Mongod wird Fehler für doppelten Schlüssel sagen.

+0

welche Version von Mongoid verwenden Sie? –

Antwort

7

Haben Sie den normalen Weg benutzt, um Ihr Modell zu speichern? Wie:

page_analyitc.save

Wenn Sie auf diese Weise verwenden Modell zu speichern, mongoid wird keine Fehlermeldung geben (wenn es einen doppelten Schlüssel auf mongodb hat)

So ist der richtige Weg, dies zu tun. verwendet:

:

page_analyitc.safely.save

Es wird eine Fehlermeldung wie erhöhen Mongo

:: OperationFailure: 11001: E11001 doppelte Schlüssel auf Update

hoffen, dass diese Informationen können Ihnen helfen.

0

Wenn Sie in Ihrem Dokument eine index hinzufügen, erstellt Mongoid automatisch keinen Index. Um den Index zu erstellen, müssen Sie die Rake-Aufgabe rake db:mongoid:create_indexes ausführen, wie Sie in der neuen Dokumentation http://mongoid.org/en/mongoid/docs/indexing.html sehen können.

Verwandte Themen