Node.js Mongoose查询:如何查找对象数组
如果您以以下格式发送json数据,服务器将尝试遍历mongodb的item文档,并编写代码,返回具有相同用户ID的数据以及itemTag接收到的完全相同的json数据 我有这个模式:Node.js Mongoose查询:如何查找对象数组,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,如果您以以下格式发送json数据,服务器将尝试遍历mongodb的item文档,并编写代码,返回具有相同用户ID的数据以及itemTag接收到的完全相同的json数据 我有这个模式: var subSchema = mongoose.Schema({ main:Number, sub:Number, color:Number },{ _id : false }); var ItemSchema = new Schema({ userId:String, date:S
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
}
]
}
{
"_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
}
]
}
db数据:
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
}
]
}
{
"_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
}
]
}
**和客户端发送json数据:**
服务器获取
req.body.userId
req.body.itemTag
{
"userId":"aaa",
"itemTag":[{
"main":3,
"sub":7,
"color":1
},{
"main":4,
"sub":4,
"color":1
}]
}
我想得到:
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
}
]
}
{
"_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)
或
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}})
我不明白您想要实现什么,您能再解释一下吗?我想在db中找到与以下itemTag数组相同的值。{“ItemTag”:[{“Main”:3,“Sub”:7,“Color”:1},{“Main”:3,“Sub”:1,“Color”:11}}}谢谢。。但我收到了这样一条消息:{“消息”:“转换为数字失败,因为值\”[{main:3,sub:7,color:1},{main:4,sub:4,color:1}]\“路径\“main\”对于模型\“Item\”,“name”:“CastError”,“stringValue”:“\”[{main:3,sub:7,color:1},{main:4,sub:4,color:1}],“种类”:“数字”,请发布您正在执行的查询,并确保所有文档字段(“主”、“子”和“颜色”都是数字字段)