mongo dbの配列の要素を取得しようとしています。私は、だから私はので、現在私が使っ理由です一致しないために要素に比べて一致するように、より多くの要素をMongodbスライスと要素マッチングを使用する
{
"_id" : ObjectId("s4dcsd5s4d6c54s6d"),
"items" : [
{
type : "TYPE_1",
text : "blablabla"
},
{
type : "TYPE_2",
text : "blablabla"
},
{
type : "TYPE_3",
text : "blablabla"
},
{
type : "TYPE_1",
text : "blablabla"
},
{
type : "TYPE_2",
text : "blablabla"
},
{
type : "TYPE_1",
text : "blablabla"
}
]
}
を持っているのは、想像してみましょうパターン
と一致していない15個の最初の要素を取得したいと思いますnin。それは私が
db.history.find({ "_id" : ObjectId("s4dcsd5s4d6c54s6d")}, { "items" : { "$elemMatch" : { "type" : { "$nin" : [ "TYPE_2" , "TYPE_3"]}}}, "items" : { $slice : [0, 2]}}).pretty()
を使用する場合私がしなければ次に
(私は、スライス後の要素の試合を置けば、同様の逆を)要素の一致が考慮されていないようです
をsimplifiyすることです:エラーがモンゴ
によってスローされます
db.history.find({ "_id" : ObjectId("s4dcsd5s4d6c54s6d")}, { "items" : { "$elemMatch" : { "type" : { "$nin" : [ "TYPE_2" , "TYPE_3"]}}, $slice : [0, 2]}}).pretty()
あなたはどのように私ができる知っていますか行う?
どうもありがとう
おかげであなたをbetrand。 – Geoffrey
簡単な質問springdata mongodbを使用しますか?あなたが言ったことを実際に使用しようとしています。 '集合集約= newAggregation(一致(Criteria.where( 'id')。is(profileID))、unwind( 'items')、match(Criteria。( 'items.type')。nin(無視されたアイテムタイプ))、limit(3)、skip(1)); ' そして、私は次のようになります: ' {"集計": "__collection__"、 "パイプライン":{"" $一致 ":{" id ":" 5856dcf347816870aab76137 "}}、{" $ unwind ":" $ items "" $ {match}:{"items.type":{"$ nin":["TYPE_2"、 "TYPE_3"、 "TYPE_4"、 "TYPE_5"、 "TYPE_6"]}}}、{"$ 「制限」:3}、{"$ skip":0}]} アイデアはありますか? – Geoffrey
_idにobjectId型を使用し、Stringではなく、これが問題の可能性があります。http://stackoverflow.com/questions/14346028/spring-data-mongodb-query-converts-string-to-objectid-automatically –