我正在尝试查询具有此类对象数组的文档。它是添加标签的历史。
{
"added_by" : ObjectId("58d92d8b11af264b87a8f5d4"),
"tag" : ObjectId("58d92d8b11af264b87a8f5ed"),
"_id" : ObjectId("58d92d8c11af264b87a8f6d5"),
"added_at" : ISODate("2017-03-02T22:06:42.788Z")
}
我无法仅对_id
我试过这个:
var query = {
'tags.tag': {
slug: $in: ['tag-name']
}
}
Node.find(query, (err, nodes) => {
if (err) {
res.status(404)
res.send(err)
} else {
res.json(nodes);
}
}).populate(['tags.tag'])
以下是文件:
{
"_id" : ObjectId("58d92d8c11af264b87a8f6d0"),
"user_id" : ObjectId("58d92d8b11af264b87a8f5d4"),
"uid" : "-KeG2FvL0jwkHFvOautH",
"updated_at" : ISODate("2017-03-02T22:06:42.788Z"),
"created_at" : ISODate("2017-03-02T22:06:42.051Z"),
"tags" : [
{
"added_by" : ObjectId("58d92d8b11af264b87a8f5d4"),
"tag" : ObjectId("58d92d8b11af264b87a8f5ed"),
"_id" : ObjectId("58d92d8c11af264b87a8f6d5"),
"added_at" : ISODate("2017-03-02T22:06:42.788Z")
},
{
"added_by" : ObjectId("58d92d8b11af264b87a8f5d4"),
"tag" : ObjectId("58d92d8b11af264b87a8f626"),
"_id" : ObjectId("58d92d8c11af264b87a8f6d4"),
"added_at" : ISODate("2017-03-02T22:06:42.788Z")
}
],
"status" : "publish",
"description" : "some text here",
"title" : "Anna James",
"__v" : 0
}
有什么想法吗?
答案 0 :(得分:0)
由于您存储了对标记的引用,因此您需要先通过slug获取标记:
TagsCollection.find({slug:'tag-name'}, (err, tags)...)
然后按tag._id过滤:
var query = {
'tags.tag': new ObjectId(tag._id)
}
或
var query = {
'tags.tag': {'$in": [new ObjectId(tag._id), ....]}
}
如果你有超过1个标签与slug匹配。
老实说,如果您将标签直接存储在文档中,而不是存储引用,那么效率会更高。