[英]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.