MongoDB извлекает только определенные данные - PullRequest
0 голосов
/ 21 июля 2011

У меня есть такая коллекция:

{
  "Post": {
    "post": "These are following example of your station of the various stamps, and this can't be foured by the name.\n\n          also I can't use this way to search string in the midle way, also what are you doing is the default factory",
    "like": [
      "rudi",
      "tabootie",
      "oknoorap",
      "various",
      "rusian_roulette"
    ],
    "Comment": [
      {
        "comment_id": 1,
        "name": "Anonymous",
        "comment": "You are absolutely right dude, when you call me, you can host here",
        "like": [
          "rudi",
          "stumble",
          "upon",
          "facebook"
        ]
        "timestamp": {
          "t": 9000,
          "i": 1311245225
        }
      },
      {
        "comment_id": 2,
        "name": "Anonymous",
        "comment": "the guy is here",
        "like": [
          "rudi",
          "stumble",
          "upon",
          "facebook"
        ]
        "timestamp": {
          "t": 10000,
          "i": 1311245225
        }
      },
      {
        "comment_id": 2,
        "name": "Oknoorap",
        "comment": "the other guy is here",
        "like": [
          "rudi",
          "stumble",
          "upon",
          "facebook"
        ]
        "timestamp": {
          "t": 11000,
          "i": 1311245225
        }
      }
    ]
  }
}

Не могли бы вы мне помочь?Как получить только для Post.Comment.comment_id = 2, отрицание для _id, post и т. Д.

Ответы [ 3 ]

0 голосов
/ 01 августа 2012

Java или Javascript?

Java:

//Query items
BasicDBObject query = new BasicDBObject();
query.put("Post.Comment.comment_id", 2);

//Show items
BasicDBObject showField = new BasicDBObject();
showField.put("post", 1); //show
showField.put("other", 0); //hide

//Execute query
DBCursor cursor = dbc.find(query, showField);

......
0 голосов
/ 11 сентября 2012

Хотя схема вашего документа, возможно, может быть улучшена .. Aggregation Framework в MongoDB 2.2 обеспечивает некоторую новую гибкость.

Примечание: у вас есть два комментария с comment_id = 2 в вашем примере,что кажется ошибкой, если вы используете это для уникальной идентификации комментария.Я предполагаю, что ваш третий comment_id на самом деле должен быть comment_id = 3.

Вот пример с комментариями, используя aggregate():

db.posts.aggregate(

    // Find specific post
    { $match : {
        '_id' : 123,
    }},

    // Unwind the Post.Comment array into a stream of documents
    { $unwind : '$Post.Comment' },

    // Match specific comment_id
    { $match : {
        'Post.Comment.comment_id' : 2,
    }},

    // Limit results to the embedded Comment
    { $project: {
        'Post.Comment': 1
    }}
)

.. и результаты:

{
    "result" : [
        {
            "_id" : 123,
            "Post" : {
                "Comment" : {
                    "comment_id" : 2,
                    "name" : "Anonymous",
                    "comment" : "the guy is here",
                    "like" : [
                        "rudi",
                        "stumble",
                        "upon",
                        "facebook"
                    ],
                    "timestamp" : {
                        "t" : 10000,
                        "i" : 1311245225
                    }
                }
            }
        }
    ],
    "ok" : 1
}
0 голосов
/ 22 июля 2011

Невозможно получить только части массива.Вы можете ограничить выборку только для одного документа / внедренного документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...