select vs find和在Mongoose中找到vs的地方

时间:2015-05-21 18:07:30

标签: node.js mongodb mongoose

在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只控制查询最终结果中的字段,但现在我不明白FindWhere是如何不同的。我无法使用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);

2 个答案:

答案 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的所有行。现在,与该查询匹配的每个对象都有多个属性。假设它具有occupationhostnameage属性。当您指定要email occupationselect时,您说您只想要这些属性。因此,在我们的情况下,nameoccupation将不会从查询中发回。

在这种情况下,

age用于指定要查询的多个约束。通常,使用email是因为它提供了比where更大的灵活性,例如传入javascript表达式

答案 1 :(得分:1)

来自API docs on select

  

<强>查询#选择(where

     

指定要包含或排除的文档字段

find表示结果应仅包含arg.select('name occupation')字段。您不希望在结果中看到任何其他字段。

name描述了要包含在结果中的文档。 occupation表示结果中应显示这些文档的哪些字段。