簡體   English   中英

貓鼬查詢:如何查找對象數組

[英]Mongoose Query: how to find object array

如果您以以下格式發送json數據,則服務器嘗試遍歷mongodb的項目文檔,並編寫代碼以返回相同的userId和itemTag接收的json數據完全相同的數據。

我有這個架構:

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

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

數據庫數據:

{ 
   "_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
       } 
    ] 
}

我不確定,但您應該使用:

itemTag.$.main語法

要獲得數組中的第一項,可以使用:

itemTag.$0.main

對於數組中的第二項:

itemTag.$1.main

等等.......

嘗試這個

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

要么

 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)

您可以在下面嘗試查找查詢。 當數組中每個值都有條目時,查詢將$all$elemMatch一起使用以返回行。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM