2014-12-25 4 views
-2

Я хочу получить объекты в соответствии с ID, который у них есть в массиве в json-файле в mongodb. Я пробовал много способов, чтобы получить их без успеха:Json array in mongoDB

db.collection.find({"Id":"2"}) 
db.collection.find({"Messages.Id":"2"}) 
db.collection.find({"Messages":{$elemMatch:{"Id":"2"}}}) 
db.collection.find({"Messages.Id":{$elemMatch:{"Id":"2"}}}) 

{ 
    "Messages" : [ 
     { 
      "text":"aaa", 
      "Id" : [ "1", "2" ] 
     }, 
     { 
      "texts" : "bbb", 
      "Id" : [ "1", "3" ] 
     } 
    ] 
} 

Несмотря на то, что это, как это должно быть сделано в соответствии с документацией MongoDB. Так что я думал, что что-то не так с моим дизайном json (я пытался изменить его, но это тоже не помогло).
Может ли кто-нибудь предложить мне хороший дизайн или запрос на получение объектов с определенным идентификатором?

UPDATE: Я хочу, например, что, если в запросе я прошу идентификатор 2 только первое сообщение и все это будет отображаться (я не возражаю, если поле Id обыкновение отображаться)

{ 
    "text":"aaa", 
    "Id":["1","2"] 
} 
+0

Я обновил этот вопрос – user3061943

ответ

0

Чтобы найти отдельные элементы, которые вам подходят, вам необходимо использовать positional operator ($).

db.collection.find({"Messages.Id": "2"}, {"Messages.$": 1, _id: 0}) 

Для нахождения нескольких матчей, вы бы использовать aggregation pipeline:

db.collection.aggregate([ 
    { $unwind: "$Messages" }, 
    { $match: {"Messages.Id": "1"}}, 
    { $group: { _id: null, messages: { $push: "$Messages"}}} 
]) 
+0

Оно не вернуть ничего, но я буду держать глядя в это почтение, – user3061943

+0

у меня есть еще один вопрос. Я вижу, что на всех примерах в mongodb есть json, который выглядит так: {} {} {} {} объекты без запятой, разделяющих их. Я попытался сделать это, и он не работал. это специально, или я делаю это неправильно? – user3061943

+0

Я не знаю, почему это не работает. Синтаксис тот же. возможно, потому, что идентификатор находится внутри массива, который также находится внутри массива. И я говорил о примерах в mongodb, которые выглядят как '{" _id ": 1," semester ": 1," grades ": [70, 87, 90]} {" _id ": 2," semester ": 1," оценки ": [90, 88, 92]} {" _id ": 3," semester ": 1," grades ": [85, 100, 90]} {" _id ": 4, «семестр»: 2, «оценки»: [79, 85, 80]} {«_id»: 5, «семестр»: 2, «оценки»: [88, 88, 92]} {"_id": 6, «семестр»: 2, «оценки»: [95, 90, 96]} ' – user3061943