在Mongoose文档中有这个小片段:
Person
.find({ occupation: /host/ })
.where('name.last').equals('Ghost')
.where('age').gt(17).lt(66)
.where('likes').in(['vaporizing', 'talking'])
.limit(10)
.sort('-occupation')
.select('name occupation')
.exec(callback);
我很难理解.find({ occupation: /host/ })
与.select('name occupation')
的不同之处。找到添加条件,如何?还是控制返回的字段?
的更新
好的,所以我看到select只控制查询最终结果中的字段,但现在我不明白Find
和Where
是如何不同的。我无法使用Find
并使用Where
创建相同的查询吗?以下代码段是否相同?
Person
.where('occupation').equals('host')
.where('name.last').equals('Ghost')
.where('age').gt(17).lt(66)
.where('likes').in(['vaporizing', 'talking'])
.limit(10)
.sort('-occupation')
.select('name occupation')
.exec(callback);
答案 0 :(得分:1)
undname ??0Btest@@QAE@XZ
Undecoration of :- "??0Btest@@QAE@XZ"
is :- "public: __thiscall Btest::Btest(void)"
是实际查询。在此示例中,您将获得public: __thiscall Btest::Btest(void) = @ILT 990(public: __thiscall Btest::Btest(void)
public: __thiscall Btest::~Btest(void) = @ILT 710(public: __thiscall Btest::~Btest(void)
public: virtual void __thiscall A::MemberFunc(void) = @ILT 35(public: virtual void __thiscall A::MemberFunc(void)
等于find
的所有行。现在,与该查询匹配的每个对象都有多个属性。假设它具有occupation
,host
,name
和age
属性。当您指定要email
occupation
和select
时,您说您只想要这些属性。因此,在我们的情况下,name
和occupation
将不会从查询中发回。
age
用于指定要查询的多个约束。通常,使用email
是因为它提供了比where
更大的灵活性,例如传入javascript表达式
答案 1 :(得分:1)
<强>查询#选择(
where
)强>指定要包含或排除的文档字段
find
表示结果应仅包含arg
和.select('name occupation')
字段。您不希望在结果中看到任何其他字段。
name
描述了要包含在结果中的文档。 occupation
表示结果中应显示这些文档的哪些字段。