2012-06-19 3 views
0

Монго DB оболочки (, запустив с помощью JS-файл):Монго DB оболочка, как считать повторяющиеся записи в коллекции

После выполнения команды «найти», я должен выяснить, сколько в результате появляются повторяющиеся строки. Поскольку в коллекции могут быть разные JSON, мне придется разбирать каждый объект JSON для сравнения.

Короче говоря, Как перечислить ключи от объекта bson?

Например, если мы посмотрим на следующие записи 4 JSON:

// 1 
{ 
    "_id" : ObjectId("1"), 
    "Date" : "2012-06-17", 
    "k1" : "v1", 
    "k2" : "v2", 
    "k3" : "v3", 
    "k4" : "v4", 
} 
// 2 
{ 
    "_id" : ObjectId("2"), 
    "Date" : "2012-06-17", 
    "key1" : "v1", 
    "key2" : "v2", 
} 
// 3 
{ 
    "_id" : ObjectId("3"), 
    "Date" : "2012-06-18", 
    "k1" : "v1", 
    "k2" : "v2", 
    "k3" : "v3", 
    "k4" : "v4", 
} 
// 4 
{ 
    "_id" : ObjectId("4"), 
    "Date" : "2012-06-18", 
    "rk1" : "v1", 
    "rk2" : "v2", 
    "bk3" : "v3", 
    "bk4" : "v4", 
    "ck5" : "v5", 
    "ck6" : "v6", 
} 

Я хочу, чтобы игнорировать "_id" и клавиши "Date" при сравнении. Я хочу игнорировать «_id», потому что это особый монго, и я хочу игнорировать «Дату», потому что это мое требование.

И сами ключи весьма разнообразны. В каждом документе JSON имена ключей различаются, и число пар ключ-значение также меняется.

В приведенном выше случае я хочу, чтобы «1» и «3» считались одинаковыми (дублирующимися).

Как это сделать?

Как перечислить ключи из объекта bson?

+0

Я думаю, вы могли бы запустить сокращение карты, чтобы достичь этого ... что вы хотите вернуть? Просто массив различных карт свойств со счетом для каждого? – McGarnagle

+0

check mongodb Map уменьшить здесь http://www.mongodb.org/display/DOCS/MapReduce – Dhiraj

ответ

1

Возможно, stringify может пригодиться. Скажем, 1 и 3 называются data1 и data3. Сброс как идентификаторы и даты, и вы сможете их сравнить:

data1._id = null; 
data3._id = null; 
data1.Date = null; 
data3.Date = null; 
var eq = JSON.stringify(data1) === JSON.stringify(data3); //=> true 

Там какая-то Methode называется friendlyEqual в оболочке, которая делает то же самое, если я не ошибаюсь. В этом случае вы должны использовать что-то вроде: var eq = friendlyEqual(data1,data3);

+0

На самом деле, я получаю эту ошибку: JSON не определен. есть ли что-то еще, что мне нужно сделать, чтобы использовать объект JSON. – user1455545

+0

Попробуйте использовать 'friendlyEqual' вместо этого. См. Документацию по API оболочки: http://api.mongodb.org/js/current/symbols/_global_.html#friendlyEqual – KooiInc

+0

супер, это сработало. спасибо. – user1455545

Смежные вопросы