如果您使用以下格式发送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 });
db data:
{
"_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.$.main
语法
要获取数组中的第一项,您可以使用:
itemTag.$0.main
对于数组中的第二项:
itemTag.$1.main
依旧.......
答案 1 :(得分: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)
答案 2 :(得分:0)
您可以尝试以下查找查询。查询使用$all
和$elemMatch
在数组中的每个值都有条目时返回行。
var rItemTag = req.body.itemTag
var qItemTag = rItemTag.map(value => ({"elemMatch": value}));
db.collection.find({itemTag: {$all: qItemTag}})