2017-03-05 41 views
0

如果以下列格式發送json數據,服務器會嘗試通過mongodb的項目文檔並編寫返回具有相同userId和完全相同的json數據的數據的代碼itemTag收到。Mongoose查詢:如何查找對象數組

我有這樣的模式:

var subSchema = mongoose.Schema({ 
    main:Number, 
    sub:Number, 
    color:Number 
},{ _id : false }); 

var ItemSchema = new Schema({ 
    userId:String, 
    date:String, 
    itemTag: [subSchema] 
}, { versionKey: false }); 

DB數據:

{ 
    "_id" : ObjectId("58ba81eea341c37ed7268703"), 
    "date" : "20170304_175923", 
    "userId" : "aaa", 
    "itemTag" : [ 
     { 
      "main" : 3, 
      "sub" : 7, 
      "color" : 1 
     }, { 
      "main" : 3, 
      "sub" : 1, 
      "color" : 11 
     }, { 
      "main" : 4, 
      "sub" : 4, 
      "color" : 1 
     }, { 
      "main" : 5, 
      "sub" : 2, 
      "color" : 1 
     } 
    ] 
}, 
{ 
    "_id" : ObjectId("58ba81eea341c37ed7268723"), 
    "date" : "20170305_125923", 
    "userId" : "aaa", 
    "itemTag" : [ 
     { 
      "main" : 3, 
      "sub" : 7, 
      "color" : 1 

     }, { 
      "main" : 2, 
      "sub" : 2, 
      "color" : 2 
     } 
    ] 
} 

**和客戶端發送JSON數據:** 服務器獲取 req.body .userId req.body.itemTag

{ 
    "userId":"aaa", 
    "itemTag":[{ 
     "main":3, 
     "sub":7, 
     "color":1 
    },{ 
     "main":4, 
     "sub":4, 
     "color":1 
    }] 
} 

,我希望得到:

{ 
    "_id" : ObjectId("58ba81eea341c37ed7268703"), 
    "date" : "20170304_175923", 
    "userId" : "aaa", 
    "itemTag" : [ 
     { 
      "main" : 3, 
      "sub" : 7, 
      "color" : 1 
     }, { 
      "main" : 3, 
      "sub" : 1, 
      "color" : 11 
     }, { 
      "main" : 4, 
      "sub" : 4, 
      "color" : 1 
     }, { 
      "main" : 5, 
      "sub" : 2, 
      "color" : 1 
     } 
    ] 
} 
+0

我不明白你想達到什麼目的,你能再解釋一下嗎? –

+0

我想在數據庫中找到與以下itemTag數組相同的值。 { 「ItemTag」:[{ 「主」:3, 「子」:7, 「顏色」:1 },{ 「主」:3, 「子」:1, 「顏色「:11 }] } – greatsk

回答

0

您可以嘗試下面的查找查詢。查詢使用$all$elemMatch在數據中每個值都有條目時返回行。

var rItemTag = req.body.itemTag 
var qItemTag = rItemTag.map(value => ({"elemMatch": value})); 
db.collection.find({itemTag: {$all: qItemTag}}) 
+0

太棒了!有效!謝謝!!! – greatsk

0

我不知道,但你應該使用:

itemTag.$.main語法

爲了得到數組您可以在第一項用途:

itemTag.$0.main 

對於數組中的第二項:

itemTag.$1.main 

等.......

0

嘗試這個

db.collection.find(
     {"userId" : req.body.userId,"itemTag.main" : req.body.itemTag}, 
     {itemTag : 1,userId:1}) 
     .sort(sortQuery) 
     .skip(skipPage) 
     .limit(16) 

OR

db.collection.find(
     {"userId" : req.body.userId,"itemTag":{ "$elemMatch" : {main : req.body.itemTag}}}, 
     {itemTag : 1,userId:1}) 
     .sort(sortQuery) 
     .skip(skipPage) 
     .limit(16) 



//Note : In collection you need to write your collectionName 

3) - 如果您想要陣列中的特定元素

db.collection.find(
    {"userId" : req.body.userId,"itemTag":{ "$elemMatch" : {main : req.body.itemTag}}}, 
    {"itemTag.$.main" : 1,userId:1}) 
    .sort(sortQuery) 
    .skip(skipPage) 
    .limit(16) 
+0

意外令牌.. – greatsk

+0

查看我的更新回答 –

+0

謝謝..但我得到這樣的信息:{ 「消息」: 「演員到數失敗值\」[{主:3,子:7,顏色:1},{主:4,分:4,顏色:1}] \ 「在路徑\ 」主\「 爲模型\ 」項目\「」, 「名稱」: 「CastError」, 「stringValue的」: 「\」[{主:3,子:7,顏色:1}, {主:4分:4,顏色:1}] \「」, 「種」:「數」, – greatsk