MongoDB 将值存储在变量中
MongoDB store value in a variable
我正在使用 mongodb 的 vscode 扩展。我试图将值存储在一个变量中,但它 returns 未定义。查询工作正常。
var obj = db.categories.find({_id : "Space Opera"}, {_id : 0, parent : 1}) // undefined
--- 编辑 ---
categories 是表示图形数据结构的文档
db.categories.insertMany([
{
_id: "Space Opera",
ancestors: ["Science Fiction", "Fiction", "Science Fiction & Fantasy"],
parent: ["Science Fiction"],
},
{
_id: "Dystopian",
ancestors: ["Science Fiction", "Fiction", "Science Fiction & Fantasy"],
parent: ["Science Fiction"],
},
{
_id: "Cyberpunk",
ancestors: ["Science Fiction", "Fiction", "Science Fiction & Fantasy"],
parent: ["Science Fiction"],
},
{
_id: "Science Fiction",
ancestors: ["Fiction", "Science Fiction & Fantasy"],
parent: ["Fiction", "Science Fiction & Fantasy"],
},
{
_id: "Fantasy",
ancestors: ["Science Fiction & Fantasy"],
parent: ["Science Fiction & Fantasy"],
},
{
_id: "Science Fiction & Fantasy",
ancestors: [],
parent: [],
},
{
_id: "Fiction",
ancestors: [],
parent: [],
},
]);
书籍集合对象示例如下:
{
ISBN: "0006",
title: "Book6",
pages: NumberInt("135"),
price: NumberDecimal("170.5"),
copies: NumberInt("10"),
language: "russian",
author: ["Author1", "Author2", "Author3"],
category: ["Science Fiction & Fantasy"],
genre: ["Genre-6", "Genre-0"],
character: ["Character-4", "Character-3"],
}
我想像这样存储一个变量:
var category = ["Space Opera"]
---另一个问题---
由于它是一个图形数据结构,并且“科幻小说”类别有 2 个父项,因此我想执行以下操作。
- 停用科幻小说并将所有书籍分配给父类别
我有以下代码适用于具有单一类别且该类别只有一个父类别的图书。不适用于科幻小说,我相信我需要一些条件来检查类别是否有多个父项并根据我想要的类别更新类别。
db.books.aggregate([
{ $match: { category: "Space Opera" } },
{
$lookup:
{
from: "categories",
pipeline: [
{ $match: { _id: "Space Opera" } },
{ $project: { _id: 0, parent: { $first: "$parent" } } }
],
as: "category"
}
},
{ $set: { category: { $first: "$category.parent" } } }
]).toArray().forEach(function (doc) {
db.books.updateOne({ _id: doc._id }, { $set: { category: [doc.category] } });
})
嗯,mongodb 中的 属性“_id”是一个敏感问题...:),这是数据库存储文档 ID 的地方。与正常的关系数据库相反,这些 ID 不是增量整数,而是 mongodb 本身创建的对象 ID。所以这个查询 returns 未定义,因为“Space Opera”首先不可能是对象 ID,0 也不能。如果您提供更多代码,我很乐意提供更多帮助。
我正在使用 mongodb 的 vscode 扩展。我试图将值存储在一个变量中,但它 returns 未定义。查询工作正常。
var obj = db.categories.find({_id : "Space Opera"}, {_id : 0, parent : 1}) // undefined
--- 编辑 ---
categories 是表示图形数据结构的文档
db.categories.insertMany([
{
_id: "Space Opera",
ancestors: ["Science Fiction", "Fiction", "Science Fiction & Fantasy"],
parent: ["Science Fiction"],
},
{
_id: "Dystopian",
ancestors: ["Science Fiction", "Fiction", "Science Fiction & Fantasy"],
parent: ["Science Fiction"],
},
{
_id: "Cyberpunk",
ancestors: ["Science Fiction", "Fiction", "Science Fiction & Fantasy"],
parent: ["Science Fiction"],
},
{
_id: "Science Fiction",
ancestors: ["Fiction", "Science Fiction & Fantasy"],
parent: ["Fiction", "Science Fiction & Fantasy"],
},
{
_id: "Fantasy",
ancestors: ["Science Fiction & Fantasy"],
parent: ["Science Fiction & Fantasy"],
},
{
_id: "Science Fiction & Fantasy",
ancestors: [],
parent: [],
},
{
_id: "Fiction",
ancestors: [],
parent: [],
},
]);
书籍集合对象示例如下:
{
ISBN: "0006",
title: "Book6",
pages: NumberInt("135"),
price: NumberDecimal("170.5"),
copies: NumberInt("10"),
language: "russian",
author: ["Author1", "Author2", "Author3"],
category: ["Science Fiction & Fantasy"],
genre: ["Genre-6", "Genre-0"],
character: ["Character-4", "Character-3"],
}
我想像这样存储一个变量:
var category = ["Space Opera"]
---另一个问题---
由于它是一个图形数据结构,并且“科幻小说”类别有 2 个父项,因此我想执行以下操作。
- 停用科幻小说并将所有书籍分配给父类别
我有以下代码适用于具有单一类别且该类别只有一个父类别的图书。不适用于科幻小说,我相信我需要一些条件来检查类别是否有多个父项并根据我想要的类别更新类别。
db.books.aggregate([
{ $match: { category: "Space Opera" } },
{
$lookup:
{
from: "categories",
pipeline: [
{ $match: { _id: "Space Opera" } },
{ $project: { _id: 0, parent: { $first: "$parent" } } }
],
as: "category"
}
},
{ $set: { category: { $first: "$category.parent" } } }
]).toArray().forEach(function (doc) {
db.books.updateOne({ _id: doc._id }, { $set: { category: [doc.category] } });
})
嗯,mongodb 中的 属性“_id”是一个敏感问题...:),这是数据库存储文档 ID 的地方。与正常的关系数据库相反,这些 ID 不是增量整数,而是 mongodb 本身创建的对象 ID。所以这个查询 returns 未定义,因为“Space Opera”首先不可能是对象 ID,0 也不能。如果您提供更多代码,我很乐意提供更多帮助。